一种高效率的排序方法-归并排序的实现(主要解决matlab中多维数组排序的问题)

问题:在MATLAB中有一个专门排序的函数 sort(),但是该函数对于一维数组的排序非常便捷,但是对于多维数组按照某一个标准来排序就出现困难。对于一般排序来说,如果数据量在100-1000个之间可以选择“冒泡法”进行排序,这种方法容易理解,也容易编写,但是数据量过大时,冒泡法在执行效率上会出现问题。这是就有一种算法复杂程度为:nlogn的排序方法--归并排序。




%归并排序
clear;clc;
tic;
% unsorted = [0,0,2,5,6,8,4,0,7,9; 1,3,0,5,6,8,0,10,7,9; 1,3,2,5,6,8,4,10,7,9]; %没有排序的数组
load ('totalDx.mat');  % 此句是为了调试用,联合起来的时候请删除
[k ,r] = size(totalD );   %获取数组长度,是二维数组时,返回行数与列数中较大值
p = 1;
% c = size(unsorted,2); %返回数组的列数,size(unsorted,1)返回数组的行数
totalD = Mysort(totalD , p , r); 
toc;


function [ unsorted ] = Mysort( unsorted ,p , r )
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here
clc;
if p<r
    [q,unsorted] = Mysort1(unsorted,p,r); %这是什么意思
    unsorted = Mysort(unsorted,p,q-1);
    unsorted = Mysort(unsorted,q+1,r);
end


end


function [ t, unsorted ] = Mysort1( unsorted , p , r )
%UNTITLED3 Summary of this function goes here
%   Detailed explanation goes here
x = unsorted(3,r);  %取未排序的数组的最后一个数据
i = p-1;
temp =zeros(3,1);
for j = p:r-1
    if unsorted(3,j) <= x
        i=i+1;
        temp=unsorted(:,i);
        unsorted(:,i)=unsorted(:,j);
        unsorted(:,j)=temp;
    end
end
temp = unsorted(:,i+1);
unsorted(:,i+1) = unsorted(:,r);
unsorted(:,r) = temp;
t = i+1;
end

运行效果:


25万个数据排序总时间为23.6s



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值