前言
我們需先了解qsort函數
qsort函數詳解:http://t.csdnimg.cn/rTNv9
qsort函數可以排序多種數據類型,很是神奇,這是為什么,我們在里模擬實現這樣的功能
目錄
1. qsort函數模擬實現
2. 我們使用bubble_sort函數排序整形數組:
3. 再來排一下結構體:
1. qsort函數模擬實現
qsort函數內部是用快速排序實現的,在這里我們用冒泡排序實現
若還不清楚冒泡排序請看
冒泡排序:http://t.csdnimg.cn/p0oHx
我們創建一個bubble_sort函數來模擬實現qsort函數
函數可以排多種數據類型,參數絕對不能是int 類型,因此我們如此創建
void*可以存放多種類型的元素首地址,我們還要知道這個數組中有多少元素,元素個數一定是正數,size_t類型等同于unsigned int類型,還要知道每個元素占多少個字節,方便后面交換元素,還有一個用于比較的函數地址
因此bubble_sort函數主體是這樣的:
if后使用我們傳入的函數compar函數,完成比較并返回正數,負數,或0若前面的大則交換,調用swap函數。因為void*類型沒法進行加減無法遍歷數組,我們又知道最小的數據類型char是一字節,因此強制類型轉換為char*類型,此時傳入的數組每個與元素的字節大小發揮了重要作用,進行數組所有元素地址的計算,傳給swap函數,
我們來看看swap函數:
用char類型進行元素的交換,
在這里舉整形數組的例子:相當于將要交換的相鄰整形都變成4個char類型進行交換,進行相對應的交換,以width==4進行循環后,整體上將相鄰的整形交換成功了。其他的數據類型同理。
因此qsort函數至此模擬實現完成
2. 我們使用bubble_sort函數排序整形數組:
執行結果:
排序成功!!!
3. 再來排一下結構體:
執行結果:
排序成功!!!
至此我們成功實現了qsort函數的功能,我們的C語言功底又厚了一步。
感謝觀看,感謝指正。