在現在的各種內部排序算法中快速排序被認爲是效率最高的排序算法(快速排序原理),因此在C++的庫函數中已經封裝了快排函數。所以在平時的編程,我們可以直接調用這已庫函數,而不必自己去實現。這樣一方面由快排保證了程序的效率,另一方面也保證程序的正確性和可讀性。
調用c++快排的庫函數的格式:
假設待排序的數組是:T arr[100],那麼調用快排函數的格式爲:
qsort(arr,100,sizeof(arr[0]),comp);
第一個參數:arr是待排序的數組的數組名
第二個參數:100是待排序數組的大小
第三個參數:sizeof(arr[0])表示待排序數組中的每個元素的大小
第四個參數:comp是待排序數組中元素的比較函數
要調用快排的庫函數必須要滿足兩個條件:
1,載入<cstdlib>,即#include<cstdlib>
2,實現comp函數
下面數一下comp函數:
comp的函數定義格式爲 :
int comp(const void a,const void b)
如果要按從小到大排序,那麼在 a < b 時返回一個負數,a > b 是返回一個正數,a == b 返回0
反之則a < b 時返回一個正數,a > b 是返回一個負數,a == b 返回0
下面實現集中常見類型的比較函數(按照從小到大的順序)
int comp_int(const void * a,const void * b)
{
return *(int *)a - *(int *)b;
}
//數組元素爲char
int comp_char(const void *a,const void *b)
{
return *(char*)a - *(char*)b;
}
//數組元素爲double
int comp_double(const void * a,const void *b)
{
return *(double*)a > *(double*)b?1:-1;
}
//結構體
typedef struct node
{
int data;
char chs[10];
}NODE;
int comp_node(const void* a,const void* b)
{
int aa =(*(NODE*)a).data;
int bb =(*(NODE*)b).data;
return aa - bb;
}