设为首页 - 加入收藏
广告 1000x90
您的当前位置:黄大仙www78345 > 交换排列 > 正文

一道acm的排序题

来源:未知 编辑:admin 时间:2019-06-16

  Snow_storm有n(0n=100)张卡片,每张卡片上都标明了1~1000之间的某个数字,这n张卡片本来是有序的,可是Snow_storm的舍友不小心把卡片打乱了,Snow_storm现在要通过一些操作把这些...

  Snow_storm有n(0n=100)张卡片,每张卡片上都标明了1~1000之间的某个数字,这n张卡片本来是有序的,可是 Snow_storm的舍友不小心把卡片打乱了,Snow_storm现在要通过一些操作把这些卡片变回有序的,而Snow_storm是个思想简单的人,他操作的方式只有一种:交换任意两张卡片的位置。

  现在,Snow_storm想知道他最少交换几次可以达到目的,聪明的你能帮助他么?

  貌似选择排序是交换次数最少的算法应该可以记下交换的次数即可,不知道对不对。题目没说是按升序还是降序排列,这样的话要进行两次排序,一个升序,一个降序,然后比较两次交换的次数,但这样又复杂了,有没有更好的算法展开我来答

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  2010-08-01展开全部首先这不是排序题目,而是已知顺序通过两两交换达到这个顺序。

  最简单的做法,冒泡法,需要的步数是约小于n-1(如果某一步正好最小的在第一位,那么就不需要交换。总的期望步数是n-(1/1)-(1/2)-(1/3)-(1/4)-...-(1/n))。这个答案显然不是竞赛该有的。

  如果打乱顺序之后,卡片位置是纯随机的,我现在能想到的最优步数是n/2(假设n=2^k,否则略多。以下按n=2^k讨论):

  由于排序是完全随机的,第k步的期望交换次数是2^(k-1)次,因此,整体的期望交换次数是n/2-1/2次。比开始说的最简方法节约近1/2次数。

本文链接:http://apkhealth.com/jiaohuanpailie/353.html

相关推荐:

网友评论:

栏目分类

现金彩票 联系QQ:24498872301 邮箱:24498872301@qq.com

Copyright © 2002-2011 DEDECMS. 现金彩票 版权所有 Power by DedeCms

Top