首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

matlab快速排序算法实现

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
可以分别保存,也可以保存成一个文件,直接使用,效果挺好的
继承事业,薪火相传
返回列表