博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数组排序 --- 庞果
阅读量:5815 次
发布时间:2019-06-18

本文共 646 字,大约阅读时间需要 2 分钟。

题目说明


本题来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”内),以下是题目详情:

给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。

求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。

例如:

  • 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。
  • 原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。

函数头部: C/C++ int run(const int *a,int n);

算法描述


实际上,这个题目是一个N个连续数的排序,题目中有个条件需要注意一下,比如四个数,肯定是1,2,3,4这四个,不会是1,3,4,5,所以是连续数的排序,要做到交换次数最少,需要做到的只有一点: 每次交换后,交换的数中至少有一个数不需要在动了,也就是每次交换都要有直接的效果, 为了满足这个条件,我们可以这么来交换:

  • 先把“1”交换到位置“1”上
  • 然后依次把各个数交换到他们自己的位置上
  • 位置上正好是这个数的不需要交换

满足上面三点要求并进行交换就行了。

代码很简单,也没做什么优化,都传到github上了。

 

int run(const int *a,int n){	int *b=(int *)malloc(sizeof(int)*n);	int count=0;	int temp;	for(int i=0;i

 

 

转载地址:http://uxmbx.baihongyu.com/

你可能感兴趣的文章
Android SDK 的下载代理
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
LNMP一键安装
查看>>
Linux 目录结构及内容详解
查看>>
Oracle命令导入dmp文件
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
解决Unable to load R3 module ...VBoxDD.dll (VBoxDD):GetLastError=1790
查看>>
.net excel利用NPOI导入oracle
查看>>
第六课:数据库的基本工具
查看>>
关于二叉树重构的思索
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>
skynet实践(8)-接入websocket
查看>>
系统版本判断
查看>>
My97DatePicker 日历插件
查看>>
0603 学术诚信与职业道德
查看>>
小点心家族第3位成员——楼层定位效果
查看>>
Knockout.Js官网学习(enable绑定、disable绑定)
查看>>
hive基本操作与应用
查看>>