二分法排序C

2021-07-23 08:36:26 字數 980 閱讀 1385

首先說一下二分法排序的原理,

演算法思想簡單描述:

在插入第i個元素時,對前面的0~i-1元素進行折半,先跟他們

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

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

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

二分法排序最重要的乙個步驟就是查詢要插入元素的位置,也就是要在哪乙個位置上放我們要準備排序的這個元素。

當我們查詢到位置以後就很好說了,和插入排序一樣,將這個位置以後的所有元素都向後移動一位。這樣就實現了二分法排序。

然後是怎麼查詢著乙個位置呢,就是不斷的比較已排序的序列中的中間元素和要排序元素,如果大於的話,說明這個要排

序的元素在已排序序列中點之前的序列。

#include

#include

void twoinsertsort(int array,int n)

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

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

for( j = i-1;j >= left;j-- )// 後移排序碼大於r[i]的記錄

array[j+1] = array[j];

array[left] = num;// 插入 }}

看了以後就會發現,其實就是插入排序法的一種修改,當a[0],a[1]...a[i-1]排好序,尋找第i個元素在其中的位置時採用二分查詢法,於是該演算法稱二分排序法,所以我認為這不是新的演算法;另外有人說起時間複雜度是n*lgn的,其實不是,就算每次查詢的時間是lgi,但是查詢完畢還要移動元素,這個時間平均為i/2,於是總時間為(1/2+lg1) + (2/2 + lg2) + (3/2 + lg3) + ... + ((n-1)/2 + lg(n-1)), 約為n(n-2)/4+nlgn,所以時間複雜度還是n*n的。

C 二分法查詢,遞迴二分法

用二分法來求需要查詢的值.includeusing namespace std 查詢key元素是否存在 int findkey const int buf 100 const int ilen,const int key else right left mid 1 查詢失敗 return 1 查詢k...

c 排序之二分法

1.二分法查詢是一種非常高效的搜尋方法,主要原理是每次搜尋可以拋棄一半的值來縮小範圍。在離散數學中,如果f n 是在規模為n的搜尋序列中搜尋乙個元素所需要的比較次數,當n是偶數時,f n f n 2 2 2.二分法查詢的時間複雜度是 o logn 3.二分法查詢的適用情況一般滿足以下幾點 1 該陣列...

C 快速(二分法)排序

快速 二分法 排序的思想是將陣列劃分為兩邊,以某個節點v為界 設這個節點的值為 v 在節點v左邊的所有元素都小於 v,在節點v右邊的所有元素都大於v.這樣不停地劃分,到最後整個陣列就是有序的了。具體分成兩邊的思路為 起始下標為start,結束下標為 end 選擇v a end 作為中介點 先從sta...