二分插入排序
演算法思想簡單描述:通過構造二分插入函式,在插入第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...