模擬實現qsort函式

2021-08-13 08:13:49 字數 1224 閱讀 4668

模擬實現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...