sort排序,一学就会

对于一个数组,通过对数组中的元素进行交换,我们可以将数组中的元素按从大到小或从小到大的顺序排列。

当我们希望对数组中的元素进行排序时,C++为我们提供了sort,有了sort这种工具,我们将不会再纠结排序的过程。

在我们需要用sort时,需要先引入一个算法的库-----<algorithm>,sort可以对任何类型的元素进行排序,包括我们自己定义的结构体。

用sort时在C++文件开始位置加入:

#include <algorithm>

下面这段代码展示的就是sort的一般用法,默认是从小到大进行排序:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int arr[] = { 2,4,5,1,3 };
	sort(arr, arr + 5);
	for (int i = 0; i < 5; i++)
	{
		cout << arr[i]<<" ";
	}
	return 0;
}
输出:
1 2 3 4 5

如果希望arr中的元素按照从大到小排序(或按照某一规则进行排列),我们则可以再为sort传入第三个参数-----“排序方法”:

sort(arr,arr+5,greater<int>());

其中,greater表示“更大”的意思,<int>表示待排序数组的数据类型为整型,代码就会变为:

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int arr[] = { 2,4,5,1,3 };
	sort(arr, arr + 5,greater<int>());
	for (int i = 0; i < 5; i++)
	{
		cout << arr[i]<<" ";
	}
	return 0;
}

输出:
5 4 3 2 1

例1:前N名的平均数
输入一共分三行,第一行输入班级人数,第二行输入所有成绩,第三行输入想要计算的N。输出平均成绩。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int N,k,avg;
	int sum = 0;
	int arr[35];
	scanf_s("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf_s("%d", &arr[i]);
	}
	sort(arr, arr + N, greater<int>());
	scanf_s("%d", &k);
	for (int i = 0; i < k; i++)
	{
		sum = sum + arr[i];
	}
	printf("%.2f", 1.0 * sum / k);
	return 0;
}
结果:
10
93 85 77 68 59 100 43 94 75 82
4
93.00

例2:分数段统计
现如今要求将N名同学的考试成绩放在A数组中,各分段的人数存到B数组中,成绩为100的人数存到B[1]中,成绩为90到99的存到B[2]数组中,以此类推,输出所有成绩及每个分段的人数。

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
	int N,B[7];
	int sum = 0;
	int arr[35];
	scanf_s("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf_s("%d", &arr[i]);
	}
	sort(arr, arr + N, greater<int>());
	for (int i = 0; i < N; i++)
	{
		printf("%d ", arr[i]);
	}
	for (int i = 0; i < N; i++)
	{
		if (arr[i] == 100)
		{
			B[1]++;
		}
		else if (arr[i] >= 90)
		{
			B[2]++;
		}
		else if (arr[i] >= 80)
		{
			B[3]++;
		}
		else if (arr[i] >= 70)
		{
			B[4]++;
		}
		else if (arr[i] >= 60)
		{
			B[5]++;
		}
		else
		{
			B[6]++;
		}
	}
	for (int i = 1; i <= 6; i++)
	{
		printf("%d", B[i]);
	}
	return 0;
}
输入:
10
93 85 77 68 59 100 43 94 75 82
输出:
1 2 2 2 1 2 

例3.有趣的整数排序
如果我们想要按照除3余数小的优先规则进行排序,则又会用到bool函数来判断排序条件:

#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y)
{
	if (x % 3 != y % 3)
	{
		return x % 3 < y % 3 ;
	}
	else
	{
		return x < y ;
	}
}
int main()
{
	int num[105];
	int N;
	scanf_s("%d", &N);
	for (int i = 0; i < N; i++)
	{
		scanf_s("%d", &num[i]);
	}
	sort(num, num + N, cmp);
	for (int i = 0; i < N; i++)
	{
		if (i != N - 1)
		{
			printf("%d ", num[i]);
		}
		else
		{
			printf("%d\n", num[i]);
		}
	}
	return 0;
}

输入:
10
1 2 3 5 8 9 11 23 27 49
输出:
3 9 27 1 49 2 5 8 11 23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值