插入排序的基本思想是:将第i个元素插入到第i-1个前面已经排好序的集合中。
图解
假设我们有个数组是[48, 62, 35, 77, 55, 14]
,要对这个排序
我们把数组的第一个元素作为已经排好序的元素
image.png
我们把62这个元素和48比较,我们发现,62>48,所以不变
image.png
我们把35这个元素和62比较,我们发现,35<62,所以将35插入到62的左边。
image.png
我们把35这个元素和48比较,我们发现,35<48,所以将35插入到48的左边。
image.png
我们把77这个元素和62比较,我们发现,77>62,所以不变
image.png
我们把55这个元素和77比较,我们发现,55<77,所以将55插入到77的左边。
image.png
我们把55这个元素和62比较,我们发现,55<62,所以将55插入到62的左边。
image.png
我们把55这个元素和48比较,我们发现,55>48,所以不变,并结束本次比较
image.png
我们把14这个元素和77比较,我们发现,14<77,所以将14插入到77的左边。
image.png
我们把14这个元素和62比较,我们发现,14<62,所以将14插入到62的左边。
image.png
我们把14这个元素和55比较,我们发现,14<55,所以将14插入到55的左边。
image.png
我们把14这个元素和48比较,我们发现,14<48,所以将14插入到48的左边。
image.png
我们把14这个元素和35比较,我们发现,14<35,所以将14插入到35的左边。
image.png ins.gif
代码:
#include <stdio.h>
void insSort(int *arr){
for (int i=0; i<6; i++) {
for (int j=i; j>=0; j--) {
if(arr[j+1]<arr[j]){
int tmp=arr[j+1];
arr[j+1]=arr[j];
arr[j]=tmp;
}
}
}
}
int main(int argc, const char * argv[]) {
int arr[6];
arr[0]=48;
arr[1]=62;
arr[2]=35;
arr[3]=77;
arr[4]=55;
arr[5]=14;
insSort(arr);
for (int i=0; i<6; i++) {
printf("%d\t",arr[i]);
}
return 0;
}
网友评论