快排和二分查詢

2021-07-11 09:52:18 字數 2166 閱讀 6444

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

快速排序

qsort函式:

標頭檔案:或

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

函式原型:

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

qsort 使用例項:

#include

#include

#include

using namespace std;

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

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

int main()

char list[5][4] = ;

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

cout << "排序後的陣列:" << endl;

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

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

cout << endl;

二分查詢

bsearch函式:

標頭檔案:或

功能:對具有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

為比較兩個元素

elem1

和elem2

的函式。

在查詢中呼叫compare

函式一次或多次,每次都自動傳送兩個陣列元素的指標。

compare函式比較這兩個元素的大小(之所以能比較,是因為用了

strcmp

()函式)

,返回如下值之一:

( 補充說明:

strcmp()    比較兩字串的大小

<0 elem1小於

elem2

=0 elem1等於

elem2

>0 elem1大於

elem2

函式返回查詢指標。如果查詢成功,查詢指標指向key

,如果查詢失敗,查詢指標為

null

。如果查詢物件(陣列)未排序或包含相同的關鍵字,其執行結果不可預料。

bsearch使用例項:

#include

#include

#include//為strcmp()函式提供原型

using namespace std;

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

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

int main()

char list[5][4] = ;

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

cout << "該關鍵字在陣列中存在!" << endl;

二分查詢,ruby快排,歸併,ruby實現

都是採用遞迴方法,針對有序陣列。以下 前者針對含有重複的有序陣列,如 1,1,1,1,2,2,3,3,3,4,5,5,5,6 查詢最後乙個值等於要查詢的值。後者是普通的二分查詢 二分查詢 查詢最後乙個值等於給定值的元素 返回結果是陣列的下標,不能直接返回值,因為重複值無法體現是否真正返回最後乙個。d...

scala實現快排,歸併,冒泡,二分查詢

快速排序使用分治的思想,選定乙個基準點,通過一趟排序將待排序的序列分為左右兩個部分,其中左邊的部分都比基準點要小,右邊的基準點都比基準點要大,之後在分別對左右兩邊的部分,按照相同的思想繼續切分,最終達到乙個有序佇列的目的 時間複雜度 o nlog n 空間複雜度 o log n def quicks...

模板題 快排 歸併 二分

include using namespace std const int n 1000010 int q n void quick sort int q,int l,int r quick sort q,l,j quick sort q,j 1,r intmain include using na...