计数排序刷题1

题目来源:【深基9.例1】选举学生会 - 洛谷
解题思路:

设置一个和候选者人数n等大的投票箱,所有的投票人m依次排队投票给候选者,这样每个投票箱都是该候选者的票数,再依次把箱子里的票输出即可。注:这种计数排序的思想比较适合排序数字不大的情况,因为这种方法的时间复杂度为O(n+m),与人数有关,太大时间复杂度过高,得不偿失。

代码实现:
#include<iostream> 
using namespace std; 

int a[1010] = { 0 }, n, m, temp; // 声明全局变量,a数组用于存储每个候选人的票数,n为候选人数,m为投票数,temp用于临时存储投票信息

int main() // 主函数入口
{
    cin >> n >> m; // 输入候选人数n和选票数m

    for (int i = 0; i < m; i++) // 循环m次,对每张选票进行处理
    {
        cin >> temp; // 输入当前选票所投的候选人编号
        a[temp]++; // 将对应候选人的票数加1
    }

    for (int i = 1; i <= n; i++) // 遍历每个候选人
    {
        for (int j = 0; j < a[i]; j++) // 根据候选人获得的票数,循环输出候选人的编号
        {
            cout << i << ' '; // 输出候选人编号
        }
    }
    cout << endl; // 打印换行,结束输出
    return 0; // 程序正常结束
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值