模擬實現qsort函式

2021-08-03 22:42:46 字數 1253 閱讀 6120

上節提到qsort函式的原型,今天我們就來模擬下它

首先是qsort函式的主體部分,主要還是迴圈,判斷比較,較困難的是型別的轉化,我們希望可以知道每次訪問的位元組數,即將初始位址轉化為字元指標,即每次解引用可訪問乙個位元組,而再加上j*width就可以知道訪問第幾個元素,這樣就可以方便的比較了。

void bubble_qsort(void *base, int num, int width, int(*compare)(const void*elem1, const void*elem2))

} }}

接下來就是寫我們的交換函式了,在交換函式時候是將它乙個位元組乙個位元組的交換,所以要強制型別轉換為char*,每次解引用可訪問乙個位元組。交換函式了,在交換函式時候是將它乙個位元組乙個位元組的交換,所以要強制型別轉換為char*,每次解引用可訪問乙個位元組。
void swap(void*p1, void*p2,int sz)  }}
最後就是寫我們的比較函式了,比較函式需要按照我們所要排序的陣列型別和內容來設定,這裡以字串排序,結構體排序解釋。比較函式了,比較函式需要按照我們所要排序的陣列型別和內容來設定,這裡以字串排序,結構體排序解釋。
字串比較及測試**
int char_com(const void*e1, const void*e2)
int main()

;int len = sizeof(str) / sizeof(str[0]);

int wid = sizeof(str[0]);

int i = 0;

int j = 0;

qsort(str, len, wid, char_com);

for (i = 0; i < 3; i++)

getchar();

return 0;

}

結構體按年齡排序
int stu_cmp(const void*e1, const void*e2) { return (((stu*)e1)->score - ((stu*)e2)->score);

模擬實現qsort函式

模擬實現qsort函式 qsort 的函式原型是 void qsort void base,size t num,size t width,int cdecl compare const void const void qsort 即,quicksort 主要根據你給的比較條件給乙個快速排序,主要是...

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