日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序之插入排序(二分法)

發布時間:2023/12/9 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序之插入排序(二分法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 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 1

5 時間復雜度

二分插入排序和插入排序的復雜度一致,也是O(n^2)
二分插入排序是穩定的

總結

以上是生活随笔為你收集整理的排序之插入排序(二分法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。