sort
1.使用sort函数必须用头文件#include < algorithm>和using namespace std;
2.sort函数可以是三个参数也可以两个参数。
3.(1)第一个参数表示所要排序的数组的起始地址
(2) 第二个参数表示最后一位要排序的地址
(3)第三个参数表示排序是从大到小(降序)还是从小到大(升序),如果不写第三个参数,则默认为从小到大排序。
数组排序
不带参数的情况
#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
int a[10]={5,6,7,8,0,4,9,1,3,2};
int i;
sort(a,a+10);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
输出结果为
带参数的情况
#include<stdio.h>
#include<algorithm>
using namespace std;
bool cmp(int a,int b) //int代表数组数据的类型
{
return a>b; //a>b代表降序,如果是a<b代表升序
}
int main()
{
int a[10]={5,6,7,8,0,4,9,1,3,2};
int i;
sort(a,a+10,cmp); //cmp是自定义函数;
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}
结构体排序
#include<stdio.h>
#include<algorithm>
using namespace std;
struct student{
char name[10];
int number;
double sorce;
}stu[10];
bool cmp(student a,student b) //student表示数据的类型
{
return a.sorce>b.sorce; //表示以sorce为标准降序排序,结构体中的其他成员也会随sorce移动
}
int main()
{
int i;
for(i=0;i<10;i++)
scanf("%s%d%lf",&stu[i].name,&stu[i].number,&stu[i].sorce);
sort(stu,stu+10,cmp);
for(i=0;i<10;i++)
printf("%s,%d,%.2lf\n",stu[i].name,stu[i].number,stu[i].sorce);
printf("\n");
return 0;
}
qsort
void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );
base:指向第一个元素的指针,即数组首地址
num:要排序的元素个数,及数组长度
size:数组元素的大小,一般写成sizeof(base[0])
comparator:自己写的比较函数了
字符串数组排序
#include<iostream>
#include<cstring>
using namespace std;
const int maxn=1e5+10;
char word[maxn][25];
int cmp(const void *p1,const void *p2)
{
char *s1 = (char *)p1;
char *s2 = (char *)p2;
return strcmp(s1,s2);
}
int main()
{
int n;
cin >> n;
for(int i=0;i<n;i++) {
cin >> word[i];
}
qsort(word,n,sizeof(word[0]),cmp); // n表示字符串的个数
for(int i=0;i<n;i++) {
cout << word[i] << endl;
}
return 0;
}