我只是課本的搬運工,做做筆記,當練打字也可以。這裡我把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...