模擬實現qsort函式
qsort 的函式原型是
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
qsort(即,quicksort)主要根據你給的比較條件給乙個快速排序,主要是通過指標移動實現排序功能。排序之後的結果仍然放在原來陣列中。
引數意義如下:
第乙個引數 base 是 需要排序的目標陣列名(或者也可以理解成開始排序的位址,因為可以寫&s[i]這樣的表示式)
第二個引數 num 是 參與排序的目標陣列元素個數
第三個引數 width 是單個元素的大小(或者目標陣列中每乙個元素長度),推薦使用sizeof(s[0])這樣的表示式
第四個引數 compare 比較函式。
#define _crt_secure_no_warnings 1
#include
#include
int cmp(const void*n1, const void*n2) //判斷n1,n2元素大小,n1比n2大返回正數;小返回負數,相同返回0
void swap(char *buf1, char* buf2, int width) //交換每個位元組
}void qsort(void *base, int num, int width, int(*cmp)(const void* n1, const void*n2)) //模擬實現qsort ,width 是單個元素的大小 }}
}int main()
;qsort(arr1, sizeof(arr1) / sizeof(arr1[0]), sizeof(arr1[0]), cmp);
int i = 0;
for (i = 0; i < sizeof(arr1) / sizeof(arr1[0]); i++)
printf("\n");
char arr2 = ;
qsort(arr2, sizeof(arr2) / sizeof(arr2[0]), sizeof(arr2[0]), cmp);
for (i = 0; i < sizeof(arr2) / sizeof(arr2[0]); i++)
printf("\n");
system("pause");
return 0;
}
模擬實現qsort函式
上節提到qsort函式的原型,今天我們就來模擬下它 首先是qsort函式的主體部分,主要還是迴圈,判斷比較,較困難的是型別的轉化,我們希望可以知道每次訪問的位元組數,即將初始位址轉化為字元指標,即每次解引用可訪問乙個位元組,而再加上j width就可以知道訪問第幾個元素,這樣就可以方便的比較了。vo...
qsort函式及其模擬實現
qsort函式 無型別排序函式 void qsort void base,size t num,size t size,int compar const void,const void 傳入引數陣列首位址,陣列字元個數,陣列型別大小,自己寫的比較函式位址 模擬實現qsort函式 include in...
C 參考庫函式qsort 模擬實現通用氣泡排序
相信大家對氣泡排序一定不陌生吧,作為一種經典的排序方法,它的基本思想是 以公升序為例 將相鄰的兩個數進行比較,若前乙個數比後乙個數大,則交換它們的順序,這樣一趟下來,最大的數就跑到了最後一位,的二趟還是一樣的方法,最大的數不參與交換,這樣進行n 1趟後,我們就實現了排序 void bubblesor...