面试题笔试题——数组排序交换次数
来源:互联网 发布:负面情绪 知乎 编辑:程序博客网 时间:2024/04/30 13:42
作者:云梦泽
日期:20131110
题目:给定一个包含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); (特别指出:1 3 5 6 2 7 4变为有序序列交换次数为4)
看过一些网上别人写的程序,但有些有很大问题,比如对红色标记的这个序列结果可能给出的是5,其实只需4次交换便可,所以不严谨,虽然有些序列能得到正确结果。
我的思路:假设位置 1 2 3 4 5 6 7 (实际上位置索引从0开始,为方便理清思路,假设从1开始)
给定序列 (1) (3) (5) (6) (7) (5) (4)
我们依次遍历数组序列
1. 1(1)位置序号本身对应,无需交换
2. 2(3),3(2)为位置序号相互交互类型,我们只要交换一次便可将数字复位,pair计数
3. 4(6), 该情形将(6)通过交换复位,但此时4号位还是不一定为(4),所以下次检测时还是从此处开始,singl计数
直接上代码:
/*Ahthot:LiuZeKun---------------------- *DateTime:20131109-------------------- *Description:数组排序次数-----------*/#include <iostream>using namespace std;int run(const int *a,int n);int main(){int a[100];int sortCount=0;int n;cin>>n;for(int i=0;i<=n-1;i++)cin>>a[i];sortCount=run(a,n);cout<<"排序交换次数为: "<<sortCount<<endl;return 0;}int run(const int *a,int n){int pair=0,singl=0,temp=0; //pair 统计位置对; singl:统计不成对;temp:存放临时值int TempArray[100]; //临时数组memcpy(TempArray,a,sizeof(TempArray));for(int i=0;i<=n-1;i++){if(TempArray[i]==i+1)//continue;else if(TempArray[TempArray[i]-1]==i+1)pair+=1;else {temp=TempArray[TempArray[i]-1];TempArray[TempArray[i]-1]=TempArray[i];TempArray[i]=temp;singl+=1;i-=1;}}return (pair/2)+singl;}
- 面试题笔试题——数组排序交换次数
- 剑指offer——面试题38:数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 面试题38—数字在排序数组中出现的次数
- [阿里一道笔试题]排序的交换次数
- 面试题38:数字在排序数组中的次数
- 【面试题】数字在排序数组中出现的次数
- 【剑指offer】6.3知识迁移能力——面试题38:数字在排序数组中出现的次数
- 剑指 offer代码解析——面试题38数字在排序数组中出现的次数
- 对象交换排序面试题
- 排序算法——稳定性、比较次数、交换次数
- 数组排序--计算最小交换次数
- 树状数组------冒泡排序的交换次数
- 【IT笔试面试题整理】数组中出现次数超过一半的数字
- 每日一道算法题:微软面试题:在排序数组中,找出给定数字出现的次数
- 数据结构面试题总结2——数组:求出现次数超过一半的元素
- 剑指offer——面试题29:数组中出现次数超过一半的数字
- 剑指offer 面试题29—数组中出现次数超过一半的数字
- 邮箱激活用户功能
- 解决Sublime Text 2中文显示乱码问题
- Python 里的多重继承
- 事务-转账案例
- 【android-tips】SurfaceView的制作android游戏框架介绍
- 面试题笔试题——数组排序交换次数
- linux系统信息查看命令
- Centos 6 安装Nvidia显卡驱动的详细方法
- 在线支付
- linux的mount(挂载)命令
- Hibernate高级查询
- 多线程同步-mutex
- 动态代理
- Irrlicht学习之创建GUI界面