1. 程式人生 > >C語言和C++自帶排序比較(qsort和sort)

C語言和C++自帶排序比較(qsort和sort)

我們先來看看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換形式排序的,我還是小白,所以呢如果有不對的地方懇請能夠指出哈多謝多謝。