一、二分法插入排序
基本思路:每次将一个待排序的数记录下,按其顺序大小,用二分法找到合适位置插入到前面已经排序的字序列(从后向前找到合适位置),直到全部插入排序完为止。
1.1 C实现
#include<stdio.h> #include<stdlib.h> int arr_num[]; int length; void insert_sort(int length) { int i; for(i=1; i<length; i++) { int temp; int low, high, mid; temp = arr_num[i]; low=0; high=i-1; while(low<=high) { mid = (low + high)/2; //通过二分法,找到记录值合适的位置 if(temp>a[mid]) { low = mid+1; } else { high = mid-1; } } //将记录值该在的位置腾出来 for (int j = i - 1; j >= low; j--) { a[j + 1] = a[j]; } // 如果记录值当前位置,就是合适位置则不操作 if (low != i) { a[low] = temp; } }
总结
- 从未排好的序列中拿出首元素,并把它赋值给temp变量;
- 从排好的序列中,依次与temp进行比较,如果元素比temp大,则将元素后移(实际上放置temp的元素位置已经空出)
- 直到找到一个元素比temp小, 将temp放入该位置;
时间复杂度:o(n^2)
空间复杂度:o(1)
来源:https://www.cnblogs.com/shiqi17/p/9527256.html