三值排序
发布日期:2022-02-25 01:17:45
浏览次数:52
分类:技术文章
本文共 847 字,大约阅读时间需要 2 分钟。
排序是一种很频繁的计算任务。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。
写一个程序计算出,计算出的一个包括1、2、3三种值的数字序列,排成升序所需的最少交换次数。
输入第1行为类别的数量N(1≤N≤1000)
输入第2行到第N+1行,每行包括一个数字(1或2或3)。
输出包含一行,为排成升序所需的最少交换次数。
样例输入
9221333231
样例输出
4
解题思路
又是一道入门的贪心题,不过本弱鸡却一直没有思路很久才做了出来,在参考了大佬的思路后才做了出来。大佬的思路是开一个数组里的数字排好序,然后跟原数组进行位置比较,如果不对就将原数组里的数字换过去。
#includeusing namespace std;int main(){ int n; int a[1005],b[1005]; int cnt,index; cin>>n; for(int i = 1;i <= n;i++){ cin>>a[i]; } memcpy(b,a,sizeof(b)); sort(b + 1,b + 1 + n);//确定该数组里的数字本该存在的位置 cnt = 0; for(int i = 1;i <= n;i++){ if(a[i] != b[i]){ index = 0; for(int j = n;j >= i + 1;j--){ if(a[j] == b[i] && b[i] != b[j]){ //printf("a[%d] = %d b[%d] = %d\n",j,a[j],j,b[i]); index = j; if(a[i] == b[j]){ break; } } } swap(a[i],a[index]); cnt++; } } cout< <
转载地址:https://blog.csdn.net/qq_37755550/article/details/80207519 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
感谢大佬
[***.8.128.20]2024年03月29日 07时03分15秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
当下热点词再学:redis缓存预热、更新、降级,限流
2021-06-30
【redis6.0.6】redis源码慢慢学,慢慢看 -- 第五天:adlist
2021-06-30
别抖,OK? 操作系统抖动现象、网络抖动与延迟、函数抖动之防抖与节流,串讲
2021-06-30
通过域名获取主机IP -- struct addrinfo
2021-06-30
anetTcpGenericConnect 详解
2021-06-30
【转】花 10 分钟看一看,少走 30 年弯路
2021-06-30
全面分析 MySQL并发控制
2021-06-30
centOS8 安装MySQL8(亲测)
2021-06-30
虚拟机卡死在登录界面
2021-06-30
架构图、用例图、流程图、时序图、类图
2021-06-30
Github 与 Git,新手初次接触的尴尬历程
2021-06-30
我要偷偷的学Python,然后惊呆所有人(第二天)
2021-06-30
我要偷偷的学Python,然后惊呆所有人(第三天)
2021-06-30
我要偷偷的学Python,然后惊呆所有人(第四天)
2021-06-30
测试文档
2021-06-30
温故Linux后端编程(三):线程那些事儿
2021-06-30
我用过的设计模式(5)-- 中介者模式
2021-06-30