排序之二分插入排序

2021-06-20 21:09:35 字數 1075 閱讀 6769

二分插入排序

演算法思想簡單描述:通過構造二分插入函式,在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們

中間的那個元素比,如果小,則對前半再進行折半,否則對後半

進行折半,直到left>right,然後再把第i個元素前1位與目標位置之間

的所有元素後移,再把第i個元素放在目標位置上。

#include void bin(int a, int num) //構造乙個binary二分插入排序//  

//每次查詢完畢後,left總比right大一,a[left]總是存放第乙個比num大的數,因此應從此處開始,

//每個元素右移一位,並將num存入a[left]中,這樣就保證了a[0...i]是排好序的

for (j = i - 1; j >= right; j--) //後移排序下標大於a[i]的記錄//

a[j+1] = a[j];

a[left] = temp;

}

}

int main()

;

num = sizeof(a) / sizeof(int);// a中元素的個數//

bin(a, num);

for (i = 0; i < num; i++)

printf("%d ", a[i]);

printf("\n");

return 0;

}

輸出:1 2 5 6 7 8 9

還有一種遞迴法實現二分查詢...

#includeusing namespace std;

int a[110] , t ;

int bin( int left , int right )

int main()

輸入:22

輸出:22

原理:輸入的t值,在陣列a中的位置有三張情況:大於中間位置,小於中間位置,等於中間位置.

第一種情況時,再遞迴呼叫bin()函式,第二種情況同樣,第三種情況,直接返回中間位置...

排序之二分插入排序

作為乙個穩定的排序演算法,插入排序很重要,大多數程式設計師都可以很輕鬆的寫出插入排序!先看一下插入排序的 void sort insert int a,int n a j 1 x i 如果目標是把n個元素的序列公升序排列,那麼採用插入排序存在最好情況和最壞情況。最好情況就是,序列已經是公升序排列了,...

二分插入排序

基本思想 1.取arr 1 為關鍵字key,將key插入前面已拍好的序列中。2.取arr 2 為關鍵字key,將key插入前面已拍好的序列中。3.取arr n 1 為關鍵字key,將key插入前面已拍好的序列中。include include define n 10 void binsertsort...

二分插入排序

include 二分插入法排序 二分排序的時間複雜度是o n logn 空間複雜度o 1 是穩定排序 void binary insert sort int a,int len else 如果當前元素比中間元素大,當前元素要插入到中間元素的右側 for j i 1 j high j 元素後移 a h...