最近写一个简单的排序,就用冒泡就行,结果忘了。于是就重新思考写了一下。
随手写出一个,竟然写完后有点懵了,到底写的对不对呢。为方便,用matlab进行验证,并查看了网上流行的写法。
都写在下面,其中,自认为第二种为最容易理解。当然,3种写法,交换次数完全相同,交换之后结果完全相同。
程序如下
clc;clear all;close all
n=2000;
b = rand(1,n);
%% 自己以前写的排序算法,但自己已经搞不清原理了
a=b;num1=0;
for i=1:n
for j=1:i
if a(i)<a(j)
t=a(i);
a(i) = a(j);
a(j) = t;
num1 = num1+1;
% break;
end
end
end
a1=a;
%% 冒泡排序
a=b;num2=0;
for i=1:n
for j=i:n
if a(i)>a(j)
t=a(i);
a(i) = a(j);
a(j) = t;
num2 = num2+1;
end
end
end
a2=a;
%% 网上的冒泡排序
a=b;num3=0;
for i=1:n-1
for j=1:n-i
if a(j)>a(j+1)
t=a(j+1);
a(j+1) = a(j);
a(j) = t;
num3 = num3+1;
end
end
end
a3=a;
[num1,num2,num3]
执行结果 981998 981998 981998