假如数组中大部分元素已经排好序,现在要对它们排序,哪种方法快?

menzi11 2014-05-25 09:27:10
假如数组中大部分元素已经排好序,现在要对它们排序,哪种方法快?
比如说有一个数组里共有一亿个元素,其中有10个元素顺序是乱的,
用什么方法排序比较快呢? 多谢!
...全文
747 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
helloworlddtczn 2014-05-26
  • 打赏
  • 举报
回复
插入排序,在大多数元素已经排好序的前提下 插入排序较快
threenewbee 2014-05-26
  • 打赏
  • 举报
回复
插入排序最快。 不过1亿整数更适合基数排序。
赵4老师 2014-05-26
  • 打赏
  • 举报
回复
引用 3 楼 ri_aje 的回复:
smoothsort
学习了!
ri_aje 2014-05-26
  • 打赏
  • 举报
回复
雨中的路 2014-05-25
  • 打赏
  • 举报
回复
引用自 http://www.cnblogs.com/ziyiFly/archive/2008/09/10/1288494.html 4、直接插入排序的效率分析 (1)时间复杂度 从时间分析,首先外层循环要进行n-1次插入,每次插入最少比较一次(正序),移动两次;最多比较i次,移动i+2次(逆序)(i=1,2,…,n-1)。若分别用Cmin ,Cmax 和Cave表示元素的总比较次数的最小值、最大值和平均值,用Mmin ,Mmax 和Mave表示元素的总移动次数的最小值、最大值和平均值,则上述直接插入算法对应的这些量为: Cmin=n-1 Mmin=2(n-1) Cmax=1+2+…+n-1=(n2-n)/2 Mmax=3+4+…+n+1=(n2+3n-4)/2 Cave=(n2+n-2)/4 Mmax=(n2+7n-8)/4 因此,直接插入排序的时间复杂度为O(n2)。 由上面对时间复杂度的分析可知,当待排序元素已从小到大排好序(正序)或接近排好序时,所用的比较次数和移动次数较少;当待排序元素已从大到小排好序(逆序)或接近排好序时,所用的比较次数和移动次数较多,所以插入排序更适合于原始数据基本有序(正序)的情况. 插入法虽然在最坏情况下复杂性为O(n2),但是对于小规模输入来说,插入排序法是一个快速的排序法。许多复杂的排序法,在规模较小的情况下,都使用插入排序法来进行排序,比如快速排序。
一起来玩玩呗 2014-05-25
  • 打赏
  • 举报
回复
插入排序

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧