sort()函数的头文件#include<algorithm>
语法描述为:sort(begin,end)//参数begin,end表示一个范围,分别为待排序数组的首地址和尾地址。
举个例子:
#include <iostream>
#include<algorithm>
using namespace std;
int main() {
int i;
int a[10]={7,4,5,23,2,73,41,52,28,60};
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+10);
for(i=0;i<10;i++)
cout<<a[i]<<" ";
return 0;
}
ps:sort()把数组a按升序排列,因为sort()默认为升序。
如何利用sort()实现降序排序?
- 自己编写compare()—sort(begin,end,compare)//最后一个参数compare表示比较的类型
#include <iostream>
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{
return a>b;//降序排列,如果改为return a<b,则为升序
}
int main() {
int i;
int a[10]={7,4,5,23,2,73,41,52,28,60};
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+10,compare);
for(i=0;i<10;i++)
cout<<a[i]<<" ";
return 0;
}
-
利用functional标准库—
#include<functional>
functional标准库提供了基于模板的比较函数对象:
a.equal_to<type>
—等于
b.not_equal_to<type>
—不等于
c.greater_equal<type>
—大于等于
d.greater<type>
—大于
e.less_equal<type>
—小于等于
f.less<type>
—小于对于本问题而言:
*升序:sort(begin,end,less<data-type>())
*降序:sort(begin,end,greater<data-type>())--->sort(a,a+10,greater<int>());
#include <iostream>
#include<algorithm>
#include<functional>
using namespace std;
int main() {
int i;
int a[10]={7,4,5,23,2,73,41,52,28,60};
for(i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
sort(a,a+10,greater<int>());
for(i=0;i<10;i++)
cout<<a[i]<<" ";
return 0;
}
补充思考:
sort函数有sort(),stable_sort()和partial_sort()
a. sort()函数是对给定区间的元素进行排序,但是会改变值相同的元素的相对位置。
b. stable_sort()是对给定区间的元素进行稳定排序,如果两个元素相等,那么排序完成后两个元素的相对位置保持不变,c.partial_sort()是对给定区间的元素进行部分排序。默认的顺序是由小到大进行排序。
三种函数的用法如下(v为容器):
sort(v.begin(),v.begin()+4,comp);
sort(v.begin(),v.end(),comp);
stable_sort(v.begin(),v.end(),comp)
stable_sort的用法与sort类似
partial_sort(v.begin(),v.begin()+4,v.end());
partial_sort(v.begin(),v.begin()+4,v.end(),comp);
题目描述
定义一个学生结构体类型student,包括4个字段,姓名、性别、年龄和成绩。然后在主函数中定义一个结构体数组(长度不超过1000),并输入每个元素的值,程序使用冒泡排序法将学生按照成绩从小到大的顺序排序,然后输出排序的结果。
输入
第一行是一个整数N(N< 1000),表示元素个数;接下来N行每行描述一个元素,姓名、性别都是长度不超过20的字符串,年龄和成绩都是整型。
输出
按成绩从小到大输出所有元素,若多个学生成绩相同则成绩相同的同学之间保留原来的输入顺序。
样例输入
3
Alice female 18 98
Bob male 19 90
Miller male 17 92
样例输出
Bob male 19 90
Miller male 17 92
Alice female 18 98
#include<bits/stdc++.h>
using namespace std;
struct student{
string name;
string sex;
int age;
int grade;
}s[1005];
bool cmp(student a,student b){
return a.grade<b.grade;
}
int main(){
int N;
cin>>N;
for(int i=0;i<N;i++){
cin>>s[i].name>>s[i].sex>>s[i].age>>s[i].grade;
}
stable_sort(s,s+N,cmp);
for(int i=0;i<N;i++){
cout<<s[i].name<<" "<<s[i].sex<<" "<<s[i].age<<" "<<s[i].grade<<" "<<endl;
}
return 0;
}