对于一个数组,通过对数组中的元素进行交换,我们可以将数组中的元素按从小到大的或从大到小的顺序排列
当我们希望对数组中的元素进行排序时,我们可以使用C++为我们提供的工具——sort。
sort是一个C++已经为我们实现好的工具,当我们要用它时,需要先引入一个算法的库——<algorithm>.
需要说明的是,sort可以排序任何类型的元素,包括我们自己定义的结构体。
我们将需要在C++文件的开始位置加上:
#include <algorithm>
对于下面这段排序:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int arr[] = {2,4,5,3,1};
return 0;
}
通过写
sort(arr, arr+5);
我们可以将arr中从开始的元素到第5个元素按从小到大的顺序排列
而如果我们写:
sort( arr + i, arr + j);
那么被排序的将是 arr[i] 到 arr[j-1], 其他元素将保持原位置。
如果希望arr中的元素从小到大排列(或按照某一个规则进行排列),我们可以再为sort传入第三个参数——“排序方法”:
sort(arr, arr + 5, greater<int>());
其中, greater表示“更大”的意思,<int>表示排序的数组中的元素类型为int,整个这行代码表示让一个元素类型为整数的数组从大到小排序。
我们的程序会变为:
#include <iostream>
#include <algorithm>
using namespace std;
int main(){
int arr[] = {2,4,5,3,1};
sort(arr, arr + 5, greater<int>());
return 0;
}
使用函数,还可以自定义sort排序
例如:
bool cmp(int x, int y){
return x>y;
}
该函数使sort按从大到小排序。当然若 return x < y , 则从小到大排序
学习了以上知识点,我们可以用于以下程序。
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp(int x, int y){
return x>y;
}
int main() {
int arr[10];
for (int i = 0; i < 10; i++) {
cin >> arr[i];
}
sort(arr, arr + 10);
for( int i=0; i<10; i++){
cout<< arr[i] << " ";
}
cout<< endl;
sort(arr, arr+10, cmp);
for(int i =0; i < 10; i++){
cout<<arr[i] << " ";
}
cout << endl;
return 0;
}
在这个程序中
- 我们首先将 10 个整数读入到了数组。
- 然后将其从小到大进行排序并输出。
- 又将其从大到小进行排序并输出。
拓展:
将结构体数组和sort排序,我们可以解决更加复杂的程序。
如下程序为结构体数组的排序简单例子:
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
struct Student {
string name;
int score[4];
};
bool cmp(Student x, Student y){
return x.name > y.name;
}
int main() {
Student stu[3];
for (int i = 0; i < 3; i++) {
cin >> stu[i].name;
for (int j = 0; j < 4; j++) {
cin >> stu[i].score[j];
}
}
sort(stu, stu+3, cmp);
for(int i=0; i<3; i++){
cout<<stu[i].name<<":";
for( int j = 0; j < 4; j++){
cout<<stu[i].score[j]<<" ";
}
cout<<endl;
}
return 0;
}
通过结构体数组,我可以将学生的姓名和成绩等等属性联系在一起。