我发现i = 1这个循环把最大数放到a[1]的位置之后,后面这个二重循环实际上就是把a[i]插入到a[1..i-1]的类似插入排序的过程,只是因为代码里用的是swap操作,数据移动的次数可能比教科书上的插入排序算法的插入过程要多。
所以总的算法的实际上就相当于:先把数组的最大数移到最前面,然后做一次插入排序。
【 在 ArchLinux (a lightweight and flexible distribution) 的大作中提到: 】
// i = 1
for j = 1 to n
if a[j] > a[1]
swap a[j],a[1]
for i = 2 to n
for j = 1 to i - 1
if a[j] > a[i]
swap a[j],a[i]
之后只需要研究后面这个算法的性质就行了。
【 在 foliver (Oliver) 的大作中提到: 】
: 把数组从小往大按升序排列。下面是伪代码。
: for i = 1 to n
: do for j = 1 to n
: ...................
--
修改:ArchLinux FROM 103.90.178.*
FROM 103.90.178.*