C C qsort 快速排序的用法

2021-08-13 21:25:30 字數 3022 閱讀 3042

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)

首先:看一下這個函式的原型

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 );//函式的是返回值

返回值的描述 < 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);

示例**:

#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 ...