C++ STL之 #include <algorithm>头文件
在C++中头文件algorithm中包括一些常用的方法,如下所示:
<1> sort函数是应用非常广泛的方法,其内部实现是快速排序;
其有两种模式:默认模式和自定义模式
(1)默认模式,默认升序
函数原型 void sort (RandomAccessIterator first, RandomAccessIterator last);
#include <stdio.h> #include <algorithm> using namespace std; int main () { //定义一个大小为10的数组 int arr[10] = {3, 5, 8, 2, 0, 9, 4, 7, 1, 6}; //对数组前5个元素进行排序 sort(arr, arr+5); for(int i=0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
执行结果:0 2 3 5 8 9 4 7 1 6
(2)自定义模式
函数原型 void sort (RandomAccessIterator first, RandomAccessIterator last, Compare comp);
comp 为排序规则
单关键字排序:
#include <stdio.h> #include <algorithm> using namespace std; bool comp(int x, int y) { // 按升序进行排序 return x < y; // 按降序进行排序 //return x > y; } int main () { //定义一个大小为10的数组 int arr[10] = {3, 5, 8, 2, 0, 9, 4, 7, 1, 6}; //对数组前5个元素进行排序 sort(arr, arr+5, comp); for(int i=0; i < 10; i++) { printf("%d ", arr[i]); } return 0; }
执行结果:0 2 3 5 8 9 4 7 1 6
多关键字排序:
#include <iostream> #include <algorithm> using namespace std; struct grade{ int chinese; int math; int english; }; bool comp(grade x, grade y) { if((x.chinese + x.math + x.english) != (y.chinese + y.math + y.english)) { return (x.chinese + x.math + x.english) > (y.chinese + y.math + y.english); } else { if(x.chinese != y.chinese) { return x.chinese > y.chinese; } else { if(x.math != y.math) { return x.math > y.math; } else { return x.english > y.english; } } } } int main () { grade gd[5] = {{97, 93, 87}, {94, 97, 95}, {97, 95, 100}, {102, 97, 98}, {98, 73, 93}}; sort(gd, gd+5, comp); cout<<"语文"<<" "<<"数学"<<" "<<"英语"<<" "<<"总分"<<endl; for(int i=0; i < 5; i++) { cout<<gd[i].chinese<<" "<<gd[i].math<<" "<<gd[i].english<<" "<<gd[i].chinese+gd[i].math+gd[i].english<<endl; } return 0; }
执行结果: 语文 数学 英语 总分 102 97 98 297 97 95 100 292 94 97 95 286 97 93 87 277 98 73 93 264