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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

二分插入排序(折半插入排序)--排序算法(六)

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

折半插入排序思想

直接插入排序(Straight Insertion Sort)的基本思想是:

  • 把n個待排序的元素看成為一個有序表和一個無序表。開始時有序表中只包含1個元素,無序表中包含有n-1個元素。
  • 排序過程中每次從無序表中取出第一個元素,將它插入到有序表中的適當位置,使之成為新的有序表,
  • 重復n-1次可完成排序過程。
    直接插入排序就像打牌抓牌一樣,手中的牌都是有序的,當從下面拿起一張牌的時候,與手中的牌比較,然后插入到適當位置。
  • 折半插入(Binary Insert Sort)和直接插入類似,唯一的區別就是在有序列表中比較查找插入位置時用的是二分法。因為前面部分是有序列表,所以是最理想的二分法。

    折半插入排序示例

    下面選取折半插入排序的一個中間過程對其進行說明。假設{20,30,40,10,60,50}中的前3個數已經排列過,是有序的了;接下來對10進行排列。示意圖如下:

    折半插入排序實現

    #include <stdio.h> void binaryInsert_sort(int *arr, int n){//i遍歷指針;j找到插入位,將插入為及其后面到達遍歷位的數后移//get每次從后面無序中拿到的數據//left前面有序的首指針,mid前面有序的中間指針,right前面有序的末尾指針int i, j, get, left, mid, right;for(i = 1; i < n; i++){get = arr[i]; //拿到要插入的值left = 0; right = i - 1;while(left <= right){ //前面有序部分的二分插入mid = (left + right)>>1; //每次取中值比較if(arr[mid] < get)left = mid + 1; //中值比插入數據說明在左邊elseright = mid - 1; //反之在右邊}for(j = i - 1; j >= left; j--){ //找到插入位,將元素后移,騰出空間arr[j+1] = arr[j];}arr[left] = get; //插入} } void print(int *arr, int n){int i;for(i = 0; i < n; i++){printf("%d ", arr[i]);}printf("\n"); } int main(int argc, char const *argv[]) {int arr[6] = {20, 30, 40, 10, 60, 50};int n = sizeof(arr) / sizeof(int);binaryInsert_sort(arr, n);print(arr, n);return 0; }

    時間復雜度,空間復雜度,穩定性

    • 時間復雜度:
      二分插入排序的時間復雜度是O(N2):假設被排序的數列中有N個數,遍歷一趟時間復雜度是O(N),需遍歷多少次呢?N-1次,共n-1 + n-2 + n-3 + … + 1 = n * (n -1) / 2.因此,其時間復雜度是O(N2)。
      為什么二分查找還是O(N2)呢?因為不管是二分插入還是折半插入,大頭都在遍歷和元素的后移上,二分查找只能在查找位置上節約時間。
    • 空間復雜度:
      二分插入排序的空間復雜度是O(1),因為移動元素是需要一個防止被覆蓋的臨時變量。
    • 穩定性:
      二分插入排序是穩定的算法,它滿足穩定算法的定義:假設在數列中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。則這個排序算法是穩定的!

    總結

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

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