qsort用於結構體陣列排序

2021-10-12 10:39:39 字數 958 閱讀 7739

用模擬的qsort進行解釋結構體陣列的排序

typedef struct stustu;

void swap(void *_x, void *_y,int size)

}int com(const stu *x,const stu *y)//傳進來的是陣列的地

void my_qsort(void *base, int num, int size, int const(*com)(const void*, const void *))

flag = 1;

} if (!flag)

break; }}

int main()

{//這裡是偽**

stu p[3];

my_qsort(p, 3, (int)sizeof(p[0]), com);

system("pause");

return 0;

qsort第乙個傳入的引數為需要排序的元素的首位址,很明顯我們能看到傳了結構體陣列的陣列名即首元素位址;

然後傳了乙個3,代表陣列有多少個元素需要進行排序,這個數字在氣泡排序中控制迴圈排序的次數;

再傳入乙個結構體陣列的大小,這個大小在排序函式中起到的作用是控制指標每次移動的距離以及進行交換時需要交換多少個位元組的內容。

可以看到排序函式接收的void*,然後被強轉成char*,因此每次指標移動只能移動乙個位元組,傳入size後,每次移動size個位元組即到了下乙個元素;

在交換函式swap中,每次也是只進行乙個位元組內容的交換,通過size知道需要交換多少個位元組的內容,因此交換完size位元組即完成兩個元素的交換;

需要特別注意的是每次傳入的引數起點必須是陣列中的元素位址或者對應的結構體第乙個元素位址,不能是結構體中第乙個元素之外的位址。因為這個是作為起點的,size決定了移動的距離和交換的大小,如果改變起點就造成資料的混亂,排序出來後陣列中的內容就交錯混亂了;

結構體結合qsort排序

qsort的標頭檔案是stdlib.h,noip允許使用這個標頭檔案 一 對int型別陣列排序 int num 100 例如 int cmp const void a const void b qsort num,100,sizeof num 0 cmp 二 對char型別陣列排序 同int型別 c...

結構體快速排序(qsort)

桐桐的學校剛剛舉行了期中考試,桐桐所在的七年級一共考了五個科目 語文 數學 英語 政治和歷史。現在所有成績都已經出來,班主任找到了桐桐,想讓桐桐幫忙計算班裡所有同學的五科總成績,並按照總成績由高到低的順序排名,如果兩個學生盼總成績相同,則學號小的排在前面。你能夠編寫程式幫助桐桐完成任務嗎?第1行 乙...

結構體陣列排序

在對結構體陣列排除時,首先確定需要排序陣列的關鍵字,並且在排序過程中不是交換關鍵字的順序,而是應該交換這個結構的位址,從而使得結構體中的每項能夠對應的改變 其中對應的 如下 include include struct line void quicksort struct line a,int l,...