排序原理:
将未排序的数据依次插入合适的位置完成排序。
算法过程:
举个例子:
香港小姐选美大赛中,需要根据体重从低到高进行排序。
起始颜值数组:{50,43,47,52,46,45}
1)把首个元素当成新的数组的开头:
结果:{50} {43,47,52,46,45}
2)把第2个元素位置空出来,如果前面元素比它大,再向前遍历比较,如果小,则插入:
虚拟数组:{50,x} {47,52,46,45} x:代表空出来的位置
结果:{43,50} {47,52,46,45}
3)重复2)操作,知道右边数据没有元素。
结果:{43,45,46,47,50,52}
插入排序代码:
#include<stdio.h>
#include<stdlib.h>
#define LEN(x) (sizeof(x)/sizeof(x[0]))
void insertSort(int *a,int len){
int current = 0; //当前元素
int preIndex = 0; //前面比较要元素的位置
for(int i = 1; i < len; i++){
current = a[i];
preIndex = i - 1;
while(preIndex >= 0 && a[preIndex] > current){
a[preIndex + 1] = a[preIndex];
preIndex--;
}
a[preIndex + 1] = current;
}
}
int main(){
int widght[] = {50,43,47,52,46,45};
int len = LEN(widght);
printf("美女排序前数组:\n");
for(int i = 0; i < len; i++){
printf("%d ",widght[i]);
}
insertSort(widght,len);
printf("\n\n美女排序后数组:\n");
for(int i = 0; i < len; i++){
printf("%d ",widght[i]);
}
system("pause");
return 0;
}
插入排序结果截图: