排序之插入排序(二分法)
生活随笔
收集整理的這篇文章主要介紹了
排序之插入排序(二分法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 1 基本思想
- 2 圖示
- 3 代碼
- 4 測試結果
- 5 時間復雜度
1 基本思想
二分法插入排序和上一篇的插入排序本質上沒有區別,都是從無序序列中取出數據和有序序列進行對比,放到合適的位置。
區別在于:
1.1上篇的插入排序是逐個和有序序列進行對比
1.2因為有序序列是一個有序序列(廢話),所以可以結合二分查找的方法,找到正確的位置,將元素插入。
關于二分查找,這里就不再詳細描述了。
2 圖示
略
3 代碼
#include <stdio.h> #include <string.h>//type為0時為排序從小到大 int Insert2(int array[], int len, int type) {int i = 0;int j = 0;int value = 0;int start = 0;int end = 0;int mid = 0;for (i = 1; i < len; i++){ value = array[i];start = 0;end = i - 1;while (start <= end){mid = (start + end) / 2;if (type == 0 ? (array[mid] > value) : (array[mid] < value)){end = mid - 1;} else{start = mid + 1;}}//此時的start = end + 1的位置即為value的真正位置for (j = i ; j >= start; j--){array[j] = array[j-1];}array[start] = value;}return 0; }int main() {int array[] = {9,6,5,3,1,13,2,8,7,4,5,28,5,8,6,3};int i = 0;int t = sizeof(array)/sizeof(int);Insert2(array, t, 1); printf("array is:");for (i = 0; i < t; i++){printf("%d ", array[i]);}printf("\n");return 0; }4 測試結果
#./test array is:28 13 9 8 8 7 6 6 5 5 5 4 3 3 2 15 時間復雜度
二分插入排序和插入排序的復雜度一致,也是O(n^2)
二分插入排序是穩定的
總結
以上是生活随笔為你收集整理的排序之插入排序(二分法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: synchronized 和 reent
- 下一篇: mysql8.0主从配置,MySQL 8