算法-插入排序
插入排序的原理是每插入一个数都要将它和之前的已经完成排序的序列进行重新排序,也就是要找到新插入的数对应原序列中的位置。那么也就是说,每次插入一个数都要对原来排序好的那部分序列进行重新的排序,时间复杂度同样为O(n²)。 这种算法是稳定的排序方法。
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include<malloc.h> 4 #include <string.h> 5 6 int InsertSort(int *p, int n) 7 { 8 int i, j,temp=0; 9 for (i = 1; i < n; i++) 10 { 11 temp = p[i]; 12 for (j = i-1; j >= 0; j--) 13 { 14 if (temp < p[j])//当temp比前面的数小时,把前面的数拿到temp这个位置 15 { 16 p[j+1] = p[j]; 17 } //进行下一次比较,j-1 18 else //如果temp比前面的数大,则跳出循环 19 break; 20 21 } 22 p[j+1] = temp; //因为j多循环了一次,所以加上1 23 } 24 } 25 26 28 29 int dayin(int *q,int len) 30 { 31 int i; 32 for (i = 0; i < len; i++) 33 { 34 printf("%d ", q[i]); 35 } 36 37 38 } 39 40 void main() 41 { 42 int a[] = { 5,2,4,50,5,10,10,3,1,19,11,6,7,8,9 }; 43 int len = sizeof(a) / sizeof(a[0]); 44 InsertSort(a, len); 45 dayin(a, len); 46 47 printf("\n%d", len); 48 49 50 }
函数不理解可以看下我写的解析