数组排序 --- 庞果
来源:互联网 发布:网络上流行的英文歌曲 编辑:程序博客网 时间:2024/06/05 15:21
题目说明
本题来自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<n;i++)b[i]=a[i];for(int i=0;i<n;i++){for(int k=i;k<n;k++){if(b[k]==i+1 && k!=i){count++;temp=b[k];b[k]=b[i];b[i]=temp;}}}return count;}
- 数组排序 --- 庞果
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- 数组排序
- unity 游戏存档
- VS中Tab Control用法
- OpenCV1.1无法读视频文件的解决方法
- chrome UI 学习笔记3--国际化 (转)
- Linux curses库使用
- 数组排序 --- 庞果
- 一些小工具方法,能将容器转换成指定的数组类型有使用泛型
- Log4cpp使用
- jQuery验证控件jquery.validate.js使用说明+中文API
- windows server2008r2 下载
- 设计模式之原型模式
- Linux_寄存器的读取
- Win8右键新建菜单顺序更改教程
- 在redhat5.8 上安装oracle10g