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