面试题笔试题——数组排序交换次数

本文介绍了如何计算将一个含有1-n的数列通过交换元素重新排序为递增顺序所需的最少交换次数。针对给定的数组例子,如3,2,1,只需要1次交换即可完成排序。作者提供了一个C/C++函数`run(const int *a, int n)`来解决这个问题,并分享了自己的解题思路,包括遍历数组和处理不同情况的方法。" 47759737,4427201,理解数据挖掘:关联分析基础,"['数据挖掘', '关联规则', '市场篮子分析', '数据模式', '数据预处理']
摘要由CSDN通过智能技术生成

作者:云梦泽

日期: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开始,为方便理清思路&#x

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值