天天看點

C/C++中的qsort/sort函數-排序

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函數?

繼續閱讀