快排和二分查找

我只是課本的搬運工,做做筆記,當練打字也可以。這裏我把qsort放前面講是因爲bsearch在使用之前需要對數組進行排序,排完後才能進行查找。老師說學了快排之後就不要用冒泡排序法和選擇排序法了,然而我選擇排序還不太會,找個時間整理整理吧。

 

快速排序

qsort函數:

頭文件:<cstdlib> <search.h>

功能:對具有num個元素,每個元素佔width字節的數組base按升序進行快速排序,並用排序後的數組覆蓋該數組。compare函數介紹見二分查找

函數原型:

void qsort(void * base,size_t num , size_t width , int(cdecl*compare)(const void*elem1 , const elem2));

Qsort 使用實例:

#include<iostream>

#include<cstdlib>

#include<string>

using namespace std;

int compare(const void*a, const void*b)

{

return strcmp((char*)a, (char*)b);

}

int main()

{

char list[5][4] = { "cap", "car", "cab", "can", "cat" };

qsort((void*)list, 5, sizeof(list[0]), compare);

cout << "排序後的數組:" << endl;

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

cout << list[i] << '\t';

cout << endl;

}

 

二分查找

bsearch函數:

頭文件:<cstdlib> <search.h>

功能:對具有num個元素,每個元素的寬度爲width字節的已排序的數組進行二分查找。

函數原型:

Void * bsearch (const void * key , const * base , size_t num , size_t width , int (cdecl * compare)(const void * elem1 , const void * elem2));

分析:

key爲查找關鍵字,base爲指向查找對象的指針(地址),num爲查找對象的元素個數,

Width爲元素所佔的字節數,elem1爲查找的關鍵字的指針,elem2爲與關鍵字比較的數組元素的指針,compare爲比較兩個元素elem1elem2的函數。

在查找中調用compare函數一次或多次,每次都自動傳送兩個數組元素的指針。Compare函數比較這兩個元素的大小(之所以能比較,是因爲用了strcmp()函數),返回如下值之一:

( 補充說明:

strcmp()    比較兩字符串的大小

<0 elem1小於elem2

=0 elem1等於elem2

>0 elem1大於elem2

函數返回查找指針。如果查找成功,查找指針指向key,如果查找失敗,查找指針爲NULL。如果查找對象(數組)未排序或包含相同的關鍵字,其執行結果不可預料。

Bsearch使用實例:

#include<iostream>

#include<cstdlib>

#include<string> //爲strcmp()函數提供原型

using namespace std;

int compare(const void *a,const void *b)

{

return strcmp((char*)a, (char*)b);

}

int main()

{

char list[5][4] = { "cab", "can", "cap", "car", "cat" };

if (bsearch("cab", (void*)list, 5, sizeof(list[0]), compare) != NULL)

cout << "該關鍵字在數組中存在!" << endl;

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章