C語言 #include<stdlib.h>下的qsort函數
qsort原型void qsort(void *base,size_t nmemb,size_t size,int (*compar)(const void *,const void *))
例子
#include<stdio.h>
#include<stdlib.h>
int cmp(const void *a, const void *b)
{
return *(double *)a>*(double *)b?1:-1;//這是從小到大排序
}
int main()
{
double ans[] = { 5.3,-98.6,65.351,12.5,0,-1.0,6,10 };
qsort(ans, 8, sizeof(ans[0]), cmp);//(數組,需要排序的數字個數,單個數字所占記憶體大小,比較函數)
for(int i=0;i<8;i++)
printf("%.3lf ", ans[i]);
}
-
注釋
return (int)a-(int)b;中a,b肯定是一個指針變量
(int *)a是表示把a強制轉換成一個int型的指針。
如果以前a是char型,編譯器會認為a指向的那一個位元組的記憶體單元是a裡面的東西
把a轉換成int型,編譯器會認為a指向的連續四個位元組裡的東西都是a裡面的。
(int )a就是取a指向的内容的意思,跟a的那個作用一樣
-
關于qsort最後一個參數
關于qsort的最後一個參數qsort()還需要一個指向函數的指針,被指向的函數用于确定排序順序,可以簡單了解一下就是我們要怎麼排序這個數組,是從小到大亦或是從大到小,都可以修改這裡的參數進行實作。這個比較函數接受兩個參數,就是分别指向進行比較的兩個項目的指針。For example如果第一個項目的值大于第二個項目的值,那麼比較函數傳回正數;值相等傳回值為0;相反則傳回負數。qsort()根據給定的其他資訊計算出兩個指針值,然後把它們傳遞給該比較函數。這個參數實際上是一個函數。需要我們自己在使用的時候進行編寫。我們單獨把這個參數拿出來int (compar)(const void,const coid*)
C++ 頭檔案下的sort函數
文法描述:sort(begin,end,cmp)
同qsort,cmp參數可以沒有,如果沒有預設非降序排序。
不同點↓
bool cmp(int a,int b)///升序
{
return a>b;
}
*戳這裡→幾種常見的cmp函數?