用插入排序法(你的问题是其中的一步)
下面是完整的排序描述和伪代码
题目:
输入:一组数字{a1,a2,…,an}.
输出:从大到小排序的数组.
其实,插入排序法很简单,拿我们平常玩扑克举例.刚开始时,我们手是空的,桌子上放了n张牌.我们要将牌拿起并按从左到右,从大到小的顺序整理好.拿起第一张牌时,因为手里只有一张拍,显然是按顺序排好的.然后再拿起第二张,如果第二张牌比第一张小,那么直接放在第二张的右面;如果第二张比第一张大,把第一张右移一位,然后把第二张放在第一张原来的位置上.如此下去,手中的牌永远是排好顺序的.当拿起第j张时,从右向左比较,如果第j-1张小,则第j-1张右移一位,然后和第j-2张比较,直到找到合适的位置,将第j张牌插入.当桌面上的牌全部都到了手中的时候,那么这副牌也已经按从左到右,从大到小的顺序排好了.
伪代码表述如下:
1. for 1 to length A[j]
2. do key=A[j]
3. //insert A[j] to sorted sequence A[1,2,…,j-1]
4. i=j-1
5. while(i>0 and A[i]<key)
6. A[i+1]=A[i]
7. i=i-1
8. A[i+1]=key
插入排序法的时间代价为O(n^2),是一种比较低级的排序办法.在待排元素较少时可以使用.
有不明白的给我发邮件
[email protected]