当前位置 :
求一个c++的代码~题目:给定一个数列,给它从小到大排列,每次交换两个数,求最少的交换次数~思路:找出形成单循环的个数。(单循环:一些数原来不在排序后自己的位置,却占据排序
更新时间: 2025-08-22 00:37:06
1人问答
问题描述:

求一个c++的代码~

题目:给定一个数列,给它从小到大排列,每次交换两个数,求最少的交换次数~

思路:找出形成单循环的个数。(单循环:一些数原来不在排序后自己的位置,却占据排序后那些数共占据的位置,如3412排序后是1234,其中24原来不在排序后自己的位置,但却占了排序后的24应该占得位置。(语文不好解释不大清楚-.-))。然后把原本数列不对应的数的个数减去单循环的个数就是最少交换次数。

不知道我思路对不对==不对的话求大神帮忙解释一下。顺便上一下代码,怎么找出单循环的个数-.-。

付英杰回答:
  首先告诉你你说的3412只是一种特殊情况   排序分为插入交换选择归并基数排序基数排序可以不用交换例如桶排序题目要求交换那就用冒泡排序   冒泡排序算法的运作如下:   比较相邻的元素。如果第一个比第二个大,就交换他们两个。   对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,最后的元素应该会是最大的数。   持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较   例如你要排列5个数3423455689   step12334455689   这是特殊情况一次排完   再来个复杂的46358821913   s1354621913[88]   s23521913[4688]   s321913[354688]   s4913[21354688]   比如写一个排序5个数的代码   #includevoidmain()   {   inti,j,temp;   inta[5];   for(i=0;i
最新更新
保卡通(baokatong.com)汇总了汉语字典,新华字典,成语字典,组词,词语,在线查字典,中文字典,英汉字典,在线字典,康熙字典等等,是学生查询学习资料的好帮手,是老师教学的好助手。
声明:本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
Copyright©2009-2021 保卡通 baokatong.com 版权所有