Board logo

标题: matlab快速排序算法实现 [打印本页]

作者: yuyang911220    时间: 2017-2-23 16:19     标题: matlab快速排序算法实现

只有C中的qsort存在,调用比较麻烦,其实在数据结构中,快速排序法是经典排序之一,上网搜了一下简介,把对应的VC程序改了一下,做成了下面的matlab代码:
%  快速排序法
%  基本的思想:通过一趟排序将待排的记录分割成独立的两部分,
%  其中前一部分的 记录的关键字均比另一部分记录的关键字小,
%  再分别对两组记录进行递归分割,达到排序的目的
%  平均时间复杂度为  O(log2(n))
function qsort_main()
A = rand(100, 1) * 30;
data = A; low = 1; high = 100;
data = QSort(data, low, high)
A

function  data = QSort(data, low, high)
if nargin == 1
    low = 1;
    high = length(data);
end
if(low<high)
    [data pivokey] = qPartition(data, low, high);
    data = QSort( data, low, pivokey - 1 );
    data = QSort( data, pivokey + 1, high );
end
% 将数组分成两部分,前一部分的值均比后一部分值小
% 返回分界点
function [data low] = qPartition(data, low, high)
if nargin == 1
    low = 1;
    hight = length(data);
end
pivokey=data(low);
while low < high
    while low < high & data(high) >= pivokey
        high = high - 1;
    end
    c = data(low); d = data(high);
    data(low) = d; data(high) = c;
    while low < high & data(low) <= pivokey
        low = low + 1;
    end
    c = data(low); d = data(high);
    data(low) = d; data(high) = c;
end
可以分别保存,也可以保存成一个文件,直接使用,效果挺好的




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0