C++的sort函数实现字符串排序
⼀、背景
sort函数⽤于C++中,对给定区间所有元素进⾏排序。头⽂件是#include <algorithm>。
实现原理:sort并不是简单的快速排序,它对普通的快速排序进⾏了优化,此外,它还结合了插⼊排序和堆排序。系统会根据你的数据形式和数据量⾃动选择合适的排序⽅法,这并不是说它每次排序只选择⼀种⽅法,它是在⼀次完整排序中不同的情况选⽤不同⽅法,⽐如给⼀个数据量较⼤的数组排序,开始采⽤快速排序,分段递归,分段之后每⼀段的数据量达到⼀个较⼩值后它就不继续往下递归,⽽是选择插⼊排序,如果递归的太深,它会选择堆排序。
函数原型如下
sort(first_pointer, first_pointer + n, cmp)
此函数有3个参数:
第⼀个参数是要排序的数组的起始地址。
第⼆个参数是结束的地址(最后⼀位要排序的地址的下⼀地址)
第三个参数是排序的⽅法,可以是从⼤到⼩也可是从⼩到⼤,还可以不写第三个参数,此时默认的排序⽅法是从⼩到⼤排序。
如果要改为从⼤到⼩排序,需要加⼀个函数compare。
⼆、字符串⽐较的实例
不写cmp函数,string 类提供了operator。但这只是按照字典序排序的
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string a[3];
for (int i = 0; i < 3; i++)
cin >> a[i];
sort(a, a + 3);
cout << a[0] << endl << a[1] << endl << a[2] << endl;
return 0;
}
如果按长度排序,代码如下
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
bool compare(string a, string b)
{
return a.length()<b.length();
}
int main() {
string a[3];
for (int i = 0; i < 3; i++)
cin >> a[i];
sort(a, a + 3,compare);
字符串比较函数实现
cout << a[0] << endl << a[1] << endl << a[2] << endl; return 0;
}
三、结构体⽐较的实例
struct E {
char name[101];
int age;
int score;
} buffer[100];
bool cmp(E a, E b)
{
if (a.score != b.score)
return a.score < b.score;      //分数不等,按分数递增排序
int tmp = strcmp(a.name, b.name);  // strcmp是字符串⽐较函数,相等返回0,⼤于返回1,⼩于返回-1    if (tmp != 0)
return tmp < 0;  //分数相等,逆转字符串⽐较值,实现按姓名递增排序
else
return a.age < b.age;  //分数姓名都相等,按年龄递增排序
}
int main()
{
int n;
int i;
while (~scanf("%d", &n)) {
for (i = 0; i < n; i++)
scanf("%s %d %d", &buffer[i].name, &buffer[i].age, &buffer[i].score);
sort(buffer, buffer + n, cmp);
for (i = 0; i < n; i++)
printf("%s %d %d\n", buffer[i].name, buffer[i].age, buffer[i].score);
printf("\n");
}
system("pause");
return 0;
}
参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。