Sort函数的应用

Sort是C++std中含有的函数,而C语言中并没有。

因此不仅需要头文件

#include<iostream>


#include<cstdio>

还需要

#include<algorithm>(Sort的头文件)

sort(a,a+n,cmp)含有三个参数,第一个参数是起始地址,第二个参数是末地址;这两个地址一般是数组(包括结构体数组)。

其表示对[a,a+n)区间内的元素以cmp的方式进行排序,

注意是左闭右开!

注意是左闭右开!

注意是左闭右开!(极易出错)

若对整个数组进行排序则n就等于数组长度。

第三个参数可有可无:

无则默认顺序排序,无cmp时亦可对字符串内部进行排序;

有则按照该参数的规则排序。

1.当cmp为greater<T>()时,排序结果为逆序,其中T为任意种类的数据类型。

2.当需要对结构体进行排序时,需要创建一个cmp函数,类型为bool类型,参数为(T a,T b)

其中T 为结构体名称;

函数内容:

return (表达式);

其中

若表达式值为1,则a排在b前面;

若值为0,,则b排在a前面;

例如

I.对于数的比较:

{

return a.num>b.num;

}

此时大的排在前面;

{

return a.num<b.num;

}

此时小的排在前面;

II.对于不同字符串间大小的比较:

最好直接使用C++的string,即在结构体中创建一个字符串时如此做:

string str;

string类型的变量可以直接用>,<,==来比较大小,其比较方法是按照字典序逐字母进行比较,同<string.h>中的strcmp()函数比较方式相同,即遇到不同字符或'\0'时得出比较结果.

string的简单用法:

还可以用string定义字符串数组,如 string str[10];

string.size()是指字符串的字符个数

输入string类型的变量用C++中的

cin>>str;

输出则使用

cout<<str;(被迫学习C++)

而不能使用scanf,puts,gets等C中的函数.

时间复杂度:o(NlogN);

STL中的sort并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。当数据量较大时采用快速排序,分段递归。一旦分段后的数据量小于某个阀值,为避免递归调用带来过大的额外负荷,便会改用插入排序。而如果递归层次过深,有出现最坏情况的倾向,还会改用堆排序。

下面是洛谷P1781题解,运用了字符串排序解决了大数比较:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
using namespace std;
struct pre {
	string vote;
	int num;

};
bool cmp(pre a, pre b)
{
	if (a.vote.size() > b.vote.size())//因为string直接比较的方式同strcmp,所以要先比较位数
		return 1;
	else if (a.vote.size() < b.vote.size())
		return 0;
	else
		return (a.vote > b.vote);//位数相同时再逐字符比较
}
int main()
{
	int n, i;
	pre president[21];
	scanf_s("%d", &n);
	for (i = 1; i <= n; i++)
	{
		cin >> president[i].vote;
		president[i].num = i;
	}
	sort(president + 1, president + n + 1, cmp);
	printf("%d\n", president[1].num);
	cout << president[1].vote;

}

了解更多关于String的用法详解,前往C++ string 用法详解 (byvoid.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值