1. 程式人生 > >C++中快排模板呼叫

C++中快排模板呼叫

在現在的各種內部排序演算法中快速排序被認為是效率最高的排序演算法(快速排序原理),因此在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
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;
}