插入排序类似于玩扑克牌时候的排序方式:
首先将待排序序列分为有序集和无序集,明显初始状态下,有序集为待排序序列的第一个元素,其余的为无序集。
算法代码为:
#include <stdio.h>
#include <stdlib.h>
void insertationSort();//插入排序
int main(int argc, const char * argv[])
{
insertationSort();
return EXIT_SUCCESS;
}void insertationSort()
{
int phone[10] = {3,5,7,2,5,9,8,90,54,35};
int temp = 0;
int i = 0,j = 0,n = 0;
for (i = 1; i < 10; i ++) { //外层循环,由第二个元素到最后一个元素
temp = phone[i];
j = 0;
while (temp >= phone[j] && j < i){ //在有序集中扫描
j ++;
}
if (temp < phone[j]) { //有序集中含有比哨兵大的元素,找到其位置进行交换并且将哨兵移动到相应位置,否则哨兵位置固定不动。
for (n = i;n > j; n --) {
phone[n] = phone[n -1];
}
phone[j] = temp;
}
//否则有没有
printf("第%d趟: ",i);
for(j =0; j < 10;j ++)
{
printf("%d ",phone[j]);
}
printf("\n");
}
}