n个数排序,最坏情况下的最小交换次数是多少呢?
有的文章说最少要n-1次,对吗?为什么?
它的证明如下:
证明:一:当未排序元素大于2时,每次交换都至少可以将一个元素放到它正确的位置上;当未排序元素等于2时,只要一次就可以把两个元素放到它正确的位置上。所以,最多需要n-1次。
二:若该序列为整数序列2,3,…,n,1。要将这个数列排序,必须把2到n共n-1个数往后移动。但是,每次交换只能将一个数字往后移动,所以至少需要n-1次交换才能完成排序。
第一步中:“每次交换都至少可以将一个元素放到它正确的位置上”是什么意思?
第二步中,怎么能用“若该序列为整数序列2,3,…,n,1”这样一个具体例子来证明 呢?证明要不失一般性!
你的观点呢?多谢指教
相关推荐
起泡排序法比较和移动次数——C++代码
课程的随堂作业,C语言的,用dev就能运行,萌新代码,勿喷,仅仅帮助不想写作业的朋友方便一下,反正老师也不会仔细检查的
如何最快的从n个整数中找到最小的k个数
题目描述 输入n个整数,输出其中最小的k个。 分析与解法 解法一 要求一个序列中最小的k个数,按照惯有的思维方式,则是先对这个序列从小到大排序,然后输出前面的最小的k个数。 至于选取什么的排序方法,我想你可能会第一时间想到快速排序(我们知道,快速排序平均所费时间为n*logn),然后再遍历序列中前k个元素输出即可。因此,总的时间复杂度:O(n * log n)+O(k)=O(n * log n)。 解法二 咱们再进一步想想,题目没有要求最小的k个数有序,也没要求最后n-k个数有序。既然如此,就
训练跟踪排序算法,最坏情况比较时间N(N-1)-2,一种类似于气泡排序的交换排序.zip
头歌python程序设计答案训练跟踪排序算法,最坏情况比较时间N(N-1)-2,一种类似于气泡排序的交换排序.zip
C/C++数据结构_随机10000个数:排序~8大排序代码集.rar
数据结构的所有排序,源代码,改变MAX值可以改变随机数的多少。花了一下午写出来的,清大家多多支持。一个文件,解决你课后一个下午的时间。
数据机构综合课设内部排序算法比较.docx
一.问题描述 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 二.基本要求 (1)对以下10种常用的内部排序算法进行比较:直接插入排序;折半折入排序;二路插入排序;希尔排序;冒泡排序;快速排序;简单选择排序;堆排序;归并排序;基数排序。 (2)待排序表的表长不少于100;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字移动次数(关键字交换计为3次移动)。


