插入排序的机理与打牌整理手中的牌的做法差不多。
(1)开始摸牌时,我们的左手是空的,接着一次从牌面上摸起一张牌,并将它插入到左手一把牌中的正确位置上。
(2)为了找到这张牌的正确位置,要将它与手中已有的牌从右到左进行比较。
(3)无论什么时候左手中的牌都是有序的。
插入排序升序代码如下:
1 void InsertSort(int a[], int length) 2 { 3 for(int i=1; i<length; i++) 4 { 5 //[a[0],a[i-1]]闭区间始终是有序的,故a[i-1]作为a[i]的参照元素,对a[i]进行定位。 6 if(a[i]<a[i-1])//若a[i]>=a[i-1],则[a[0],a[i]]闭区间是有序的,直接进行下一元素的比较。 7 { 8 int j = i-1;//以i-1为循环比较和后移的起点 9 int tmp = a[i];//将a[i]值存临时变量中,把j+1位置留空 10 while(tmp<a[j] && j>=0) 11 { 12 a[j+1] = a[j];//j必须大于等于0 13 j--;//从右向左比较 14 } 15 a[j+1] = tmp;//tmp>=a[j],故放在j+1位置 16 } 17 } 18 }
时间: 2024-10-10 12:20:21