插入排序类似于玩扑克牌时候的排序方式:
首先将待排序序列分为有序集和无序集,明显初始状态下,有序集为待排序序列的第一个元素,其余的为无序集。
算法代码为:
#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"); } }