天天看點

qsort()函數的使用

  void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))

base-- 指向要排序的數組的第一個元素的指針。

nitems-- 由 base 指向的數組中元素的個數。

size-- 數組中每個元素的大小,以位元組為機關。

compar-- 用來比較兩個元素的函數,即函數指針

我從我寫的代碼中抽了一個例子出來:

  注意:傳入的形參變量是兩個空指針,是以在下面的時候你要将這兩個空指針強轉為你要比較的類型,例如例子上面的:(stu*)a ,就是把a強轉為了我自己定義的結構體類型stu     然後  *(stu*)a 則是對這個指針取内容,至于這個函數是怎麼比較的,則下面說:

  如果compar傳回值小于0(< 0),那麼a所指向元素會被排在b所指向元素的左面;

  如果compar傳回值等于0(= 0),那麼a所指向元素與b所指向元素的順序不确定;(這裡展現出qsort()的不穩定)

  如果compar傳回值大于0(> 0),那麼a所指向元素會被排在b所指向元素的右面。

也就是說,如果   a.t>b.t   則return-1;(這裡簡單寫了,能表達意思就行)意思就是,如果a.t大,那a.t就排在前面,也就是對整個數組就行降序排列。