C语言和C++自带排序比较

我们先来看看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换形式排序的,我还是小白,所以呢如果有不对的地方恳请能够指出哈多谢多谢。

猜你喜欢

转载自blog.csdn.net/weixin_42324904/article/details/81182365