插入排序

基本思想:

插入排序的工作方式像许多人排序一手扑克牌。开始时,我们的左手为空并且桌子上的牌面向下。然后,我们每次从桌子上拿走一张牌并将它插入左手中正确的位置。为了找到一张牌的正确位置,我们从右到左将它与已在手中的每张牌进行比较。拿在左手上的牌总是排序好的,原来这些牌是桌子上牌堆中顶部的牌 。插入排序是指在待排序的元素中,假设前面n-1(其中n>=2)个数已经是排好顺序的,现将第n个数插到前面已经排好的序列中,然后找到合适自己的位置,使得插入第n个数的这个序列也是排好顺序的。按照此法对所有元素进行插入,直到整个序列排为有序的过程,称为插入排序。


实例:


c语言代码实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h>

int main (){
int a[]={5,6,8,7,1,3,2,9};
int len = sizeof(a)/sizeof(a[0]);
for (int k=0;k<len;k++){
printf("%d ",a[k]);
}
printf("\n");
// 首先对数组遍历便于比较
for (int i=1;i<len;i++){
int j = i-1;
int temp = a[i];
// 利用temp存a[i]的值
while(j>=0 && a[j]>temp){
// a[i] = a [j];
a[j+1] = a[j];
j--;
}
a[j+1] = temp;
// 输出每次插入后的数组
for (int k=0;k<len;k++){
printf("%d ",a[k]);
}
printf("\n");
}

system("pause");
return 0;
}

输出结果:

5 6 8 7 1 3 2 9
5 6 8 7 1 3 2 9
5 6 8 7 1 3 2 9
5 6 7 8 1 3 2 9
1 5 6 7 8 3 2 9
1 3 5 6 7 8 2 9
1 2 3 5 6 7 8 9
1 2 3 5 6 7 8 9