插入排序:将一个数插入一对有序的的数列。
先假设数列第一个值为有序,软后第二个值插入第一个数列。
然后把第三个值插入前两个数列。
以此类推,知道把所有数排列完毕。
- void InsertSort(int a[], int n)
- {
- for(int i= 1; i<n; i++){
- if(a[i] < a[i-1]){ //若第i个元素大于i-1元素,直接插入。小于的话,移动有序表后插入
- int j= i-1;
- int x = a[i]; //复制为哨兵,即存储待排序元素
- a[i] = a[i-1]; //先后移一个元素
- while(x < a[j]){ //查找在有序表的插入位置
- a[j+1] = a[j];
- j--; //元素后移
- }
- a[j+1] = x; //插入到正确位置
- }
- print(a,n,i); //打印每趟排序的结果
- }
- }
最差的情况是 n*(n-1)/2;
时间复杂度O(n*n);