資料結構 資料結構之二分查詢

2021-09-24 13:45:33 字數 1195 閱讀 4804

先上**

//二分查詢,陣列必須為有序的

int binarysearch(int key, int *a, int length)

return -1;

}

該函式接受乙個整數鍵和乙個已經有序的int陣列及陣列的大小作為引數。如果該鍵存在於陣列中則返回它的索引,否則返回-1.

演算法使用兩個變數lo和hi,並保證如果鍵在陣列中則它一定在a[lo..hi]中,然後方法進入乙個迴圈,不斷將陣列的中間鍵(索引為mid)和被查詢的鍵比較。如果被查詢的鍵等於a[mid],返回mid,否則演算法就將查詢範圍縮小一半,如果被查詢的鍵小於a[mid]就繼續在左半邊查詢,如果被查詢的鍵大於a[mid]就繼續在右半邊查詢。演算法找到被查詢的鍵或是查詢範圍為空時該過程結束。

二分查詢之所以快事因為它只需檢查很少幾個條目(相對於陣列的大小)就能夠找到目標元素(或者確認目標元素不存在)。

我是用的開發環境為qt msvc 5.6.0來寫的程式。下面看實現

//選擇排序

void sort(int *a, int length)

temp = a[i];

a[i] = a[min];

a[min] = temp;

}}int main(int argc, char *ar**)

; for(int i=0; i<50; i++)

//排序

sort(b, 50);

cout << endl << "-------------------------------" << endl;

for(int i = 0; i < 50; ++i)

int index = binarysearch(25, b, 50);

cout << endl << "-------------------------------" << endl;

qdebug() << "the key is:" << index;

return a.exec();c();

}

因為二分查詢的前提是陣列必須是有序的,所以這裡寫了個選擇排序,這裡不是專門講排序的,也就不多說明了。

下面為執行結果:

查詢的值是25,索引為17。

資料結構之二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...

資料結構之二分查詢

上面我們介紹了順序查詢,但是它的時間複雜度為o n 讓人很受傷啊,所以有了二分查詢,二分查詢是乙個時間複雜度為o logn 的演算法,當然都是說的一般情況下,二分 二分,看名字就知道它的核心是什麼了,就是不斷地額逼近查詢值。include define max len 20 typedef stru...

資料結構之二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其 缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成...