c語言中有乙個快速排序的標準庫函式 qsort ,在stdlib.h 中宣告。
定義如下:
void qsort(void *base, int nelem, unsigned int width, int ( * pfcompare)( const void *, const void *));引數解讀:
base是待排序陣列的起始位址
nelem是待排序陣列的元素個數
width是待排序陣列的每個元素的大小單位是位元組
pfcompare是乙個函式指標,指向乙個比較函式
比較函式
「比較函式」的原型是:int 函式名(const void * elem1, const void * elem2);該函式的兩個引數,elem1 和elem2,指向待比較的兩個元素。也就是說, * elem1 和* elem2 就是待比較的兩個元素。比較方法如下:
如果 * elem1 應該排在 * elem2 前面,則函式返回值是負整數(任何負整數都行)。
如果 * elem1 和* elem2 哪個排在前面都行,那麼函式返回0。
如果 * elem1 應該排在 * elem2 後面,則函式返回值是正整數(任何正整數都行)。
qsort 函式執行期間,需要比較兩個元素哪個應在前面時,就以兩個元素的位址作為引數,呼叫 pfcompare 函式。根據返回值大小,預設從小到大排序。如果返回值等於0,則哪個在前都行。
qsort系統呼叫實現
#includeint int_cmp(const void *p1, const void *p2)
int main()
; int i = 0;
qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(int), int_cmp);
for (i = 0; iqsort自己實現
#include #include #include //斷言
#include //pause
//比較函式
int compint(const void *_xp, const void *_yp)
else if (*xp < *yp)
else
}//列印函式
void print(int *arr, int num)
printf("\n");
}//字串比較函式
int compstr(const void *_xp, const void *_yp)
//交換
void swap(char *src, char *dst, int size)
}//快速排序
void my_qsort(void *arr, int num, int size, int(*comp)(const void*, const void*))
} if (flag == 0) }}
int main()
; int num1 = sizeof(arr1) / sizeof(arr1[0]);
print(arr1, num1);
my_qsort(arr1, num1, sizeof(int), compint);
print(arr1, num1);
char *arr2 = ;
int num2 = sizeof(arr2) / sizeof(arr2[0]);
print_str(arr2, num2);
my_qsort(arr2, num2, sizeof(int), compstr);
print_str(arr2, num2);
system("pause");
return 0;
}
C語言 qsort函式
c程式使用標準庫函式qsort排序整數檔案 include include include include define max 10 int int cmp const void a,const void b int main while feof fp length fclose fp qsor...
C語言qsort函式詳解
qsort函式是ansi c標準中提供的,其宣告在stdlib.h檔案中,是根據二分發寫的,其時間複雜度為n log n 其結構為 void qsort void base,size t nelem,size t width,int comp const void const void 其中 bas...
C語言的qsort函式
qsort 看起來和c 的sort 差不多,但是其實差別很大,qsort的cmp函式,傳入的是指標,返回值是int sort的則傳入值,返回值是bool 當qsort的返回值是0時,陣列的順序可能發生改變,這帶來了不確定性 當有不改變相同大小元素的順序時,需要對cmp函式做出調整 qsort的cmp...