C語言和C++自帶排序比較(qsort和sort)
阿新 • • 發佈:2019-01-01
我們先來看看C語言的,qsort函式,下面是具體的實現。
#include <stdio.h> #include <stdlib.h> /*const 讓它不能被修改,以只讀型別被用 如果函式引數是任意型別指標,就用void* */ /*qsort要自己定義函式,下面是定義的函式*/ int cmp(const void *a,const void *b) { return *(int *)a-*(int *)b; /*如果a大於b,返回真,反之返回b 這個函式是升序排列的,如果要降序排列就反過來輸出*/ } int main() { int a[100]; int n; scanf("%d",&n);//n個字元 int i; for(i=1;i<=n;i++) scanf("%d",&a[i-1]); qsort(a,n,sizeof(a[0]),cmp);//(陣列,需要排序的數字個數,單個數字所佔記憶體大小,自己定義的比較函式) for(i=1;i<=n;i++) printf("%d ",a[i-1]); return 0; }
int cmp(const void *a,const void *b)
{return *(int *)a-*(int *)b}
這個有點難理解,首先void *指標可以轉換成別的指標,(int *)就是void轉換成int 。然後再對其取內容,因為字母在ASCII裡是升序的,所以,如果a>b,就說明a在b的後面,那就返回1,真,執行交換。升序排列。
SORT :
sort是c++裡的,感覺sort更好用,因為不用自己寫函式,哈哈哈哈。
下面給個具體實現。
#include<iostream> #include<algorithm> using namespace std; int main() { int a[5]; int i,n; for(i=0;i<5;i++) cin>>a[i]; sort(a,a+5); for(i=0;i<5;i++) cout<<a[i]<<endl; return 0; }
不過這個只能升序,但是作為qsrot的精簡版,c++怎麼會不給他降序的功能呢?
嗯,我不知道有沒有,但是可以自己去定義一個函式,實現如下。
#include<iostream> #include<algorithm> using namespace std; /*如果返回值是真,就交換,也就是降序*/ bool com(int a,int b) { return a>b; } int main() { int a[5]; int i,n; for(i=0;i<5;i++) cin>>a[i]; sort(a,a+5,com); for(i=0;i<5;i++) cout<<a[i] <<" "; return 0; }
嗯嗯,這就是sort換形式排序的,我還是小白,所以呢如果有不對的地方懇請能夠指出哈多謝多謝。