c/c++語言函式庫中有很多排序函式,今天說一下qsort()快速排序函式。原始碼如下:
void qsort ( void * base, size_t nmem, size_t size, int ( * comp) ( const void * , const void * ) ) ;
它根據comp所指向的函式所提供的順序對base所指向的陣列進行排序,nmem為參加排序的元素個數,size為每個元素所佔的位元組數。
例如要 對元素進行公升序排列,則定義comp所指向的函式為:如果其第乙個引數比第二個引數小,則返回乙個小於0的值,反之則返回乙個大於0的值,如果相等,則返 回0。
例:
# include < stdio. h>
# include < stdlib. h>
int comp( const void * , const void * ) ;
int main( int argc, char * argv[ ] )
; qsort ( array, 6, sizeof ( int ) , comp) ;
for ( i = 0; i < 6; i + + )
printf ( "\n" ) ;
return 0;
} int comp( const void * p, const void * q)
首先:看一下這個函式的原型
返回值的描述 < 0 elem1 比 elem2 小 0 elem1 等於 elem2 > 0 elem1 比 elem2 大 一、對int型別陣列排序int num[100];int cmp ( const void *a , const void *b )qsort(num,100,sizeof(num[0]),cmp);void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
compare( (void *) elem1, (void *) elem2 );
void *base //被排序的專案
size_t num//被排序的專案的數目
size_t width//被排序單個專案所佔記憶體
int (__cdecl *compare )(const void *elem1, const void *elem2 ) //大小比較函式
compare( (void *) elem1, (void *) elem2 );//函式的是返回值
示例**:
#include#includeint compare(const void *a,const void *b)
void main()
;qsort(num,10,sizeof(int),compare);
for(int i=0;i<10;i++)
cout< *(double *)b ? 1 : -1; // 注意,直接相減不能返回整形數
}qsort(in,100,sizeof(in[0]),cmp);
四、對結構體一級排序
struct in
s[100]
//按照data的值從小到大將結構體排序,關於結構體內的排序關鍵資料data的型別可以很多種,參考上面的例子寫
int cmp( const void *a ,const void *b)
qsort(s,100,sizeof(s[0]),cmp);
五、對結構體二級排序
struct in
s[100];
//按照x從小到大排序,當x相等時按照y從大到小排序
int cmp( const void *a , const void *b )
qsort(s,100,sizeof(s[0]),cmp);
//按照結構體中字串str的字典順序排序
struct in
s[100];
int cmp ( const void *a , const void *b )
qsort(s,100,sizeof(s[0]),cmp);
六、對字串進行排序
示例**:
#include#include#include//using namespace std;
int compare(const void *a,const void *b)
void main()
;qsort(str,4,sizeof(str[0]),compare);
for(int i=0;i<3;i++)
couty,p[1].x,p[1].y) < dis(d->x,d->y,p[1].x,p[1].y)) //如果在一條直線上,則把遠的放在前面
return 1;
else return -1;
} c++中載入標頭檔案 "iostream"
c中qsort函式包含在的標頭檔案裡,strcmp包含在的標頭檔案裡
///sort(a.begin(),a.end())
sort(p,p+n,cmp)
bool cmp(const int& a,const int& b)
///三.qsort(a,n,sizeof(int),compare)
其中compare是指向函式的指標,應用如下:
int compare(const void*b,const void*c)
如果a為二維陣列,即a[n][m],排序如下:
qsort(a,n,sizeof(int)*m,compare)
int compare(const void*b,const void*c)
如果a是字元陣列,排序如下;
qsort(a,strlen(a),sizeof(char),cmp);
int cmp(const void*b,const void*c)
C C qsort 快速排序的用法
c語言中排序的演算法有很多種,系統也提供了乙個函式qsort 可以實現快速排序。原型如下 void qsort void base,size t nmem,size t size,int comp const void const void 它 根據comp所指向的函式所提供的順序對base所指向的...
快速排序的改進 隨機快速排序
快速排序是一種高效的排序方法,但是如果我們的輸入陣列是排好序的乙個陣列,快速排序的執行時間就會變成o n 2 雖然這種情況很少會出現,但我們還是應該避免。演算法導論書籍中的修改方法 在排序方法中隨機化選取主元。根據計算,改進後的方法時間複雜度的期望為o nlgn 下面是改進後的 快速排序 publi...
快速排序 轉 快速排序的實現
總的說來,要直接默寫出快速排序還是有一定難度的,因為本人就自己的理解對快速排序作了下白話解釋,希望對大家理解有幫助,達到快速排序,快速搞定。快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod ...