社区
C++ 语言
帖子详情
假如数组中大部分元素已经排好序,现在要对它们排序,哪种方法快?
menzi11
2014-05-25 09:27:10
假如数组中大部分元素已经排好序,现在要对它们排序,哪种方法快?
比如说有一个数组里共有一亿个元素,其中有10个元素顺序是乱的,
用什么方法排序比较快呢? 多谢!
...全文
747
6
打赏
收藏
假如数组中大部分元素已经排好序,现在要对它们排序,哪种方法快?
假如数组中大部分元素已经排好序,现在要对它们排序,哪种方法快? 比如说有一个数组里共有一亿个元素,其中有10个元素顺序是乱的, 用什么方法排序比较快呢? 多谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
helloworlddtczn
2014-05-26
打赏
举报
回复
插入排序,在大多数元素已经排好序的前提下 插入排序较快
threenewbee
2014-05-26
打赏
举报
回复
插入排序最快。 不过1亿整数更适合基数排序。
赵4老师
2014-05-26
打赏
举报
回复
引用 3 楼 ri_aje 的回复:
smoothsort
学习了!
ri_aje
2014-05-26
打赏
举报
回复
smoothsort
雨中的路
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
打赏
举报
回复
插入排序
Java语言冒泡
排序
.pdf
冒泡
排序
是一种简单的
排序
算法,它的基本思想是通过相邻
元素
的比较和交换位置,将最大的
元素
逐渐"冒泡"到数组的末尾。 具体实现步骤如下: 从第一个
元素
开始,依次比较相邻的两个
元素
的大小,如果前一个
元素
大于后一个
元素
,则交换它们的位置。 继续比较下一个相邻的两个
元素
,重复步骤1,直到比较到倒数第二个
元素
。 重复步骤1和步骤2,直到所有
元素
都
已经
排好序
。 冒泡
排序
的时间复杂度为O(n^2),其中n是数组的长度。它是一种稳定的
排序
算法,适用于小规模的数组或是部分有序的数组。
用递归和非递归两种方式实现归并
排序
归并
排序
是一种基于分治思想的
排序
算法,它将待
排序
的数组分成两部分,分别对这两部分递归地进行
排序
,最后将两个有序子数组合并成一个有序数组。它的时间复杂度为O(nlogn)。 归并
排序
的基本思路是将待
排序
的数组分成两个部分,分别对这两部分进行
排序
,然后将
排好序
的两部分合并成一个有序数组。这个过程可以用递归来实现。具体的实现步骤如下: 1. 分解:将待
排序
的数组不断分成两个子数组,直到每个子数组只有一个
元素
为止。 2. 合并:将相邻的两个子数组合并成一个有序数组,直到最后只剩下一个有序数组为止。 在合并的过程中,需要用到一个辅助数组来暂存合并后的有序数组。具体来说,假设待合并的两个有序数组分别为A和B,它们的长度分别为n和m,合并后的有序数组为C,那么合并的过程可以按如下步骤进行: 1. 定义三个指针i、j和k,分别指向数组A、B和C的起始位置。 2. 比较A[i]和B[j]的大小,将小的
元素
放入C[k]中,并将对应指针向后移动一位。 3. 重复步骤2,直到其中一个数组的
元素
全部放入C中。 4. 将另一个
数组中
剩余的
元素
放入C中。
《C语言基础》 之 第8章 数组
课程内容:数组的声明、定义(初始化)、数组的赋值、数组在内存中的空间特点、使用 [ ] 访问数组
元素
、数组
元素
的指针、数组第一个
元素
指针的表示
方法
、数组命令与++、sizeof与数组、数组名总结、函数普通传参回顾...
快
排查找
数组中
的第K个最大
元素
冒泡
排序
、插入
排序
、选择
排序
时间复杂度都是O(n2),适合小规模数据
排序
。 两种时间复杂度为O(nlogn)的
排序
算法,归并
排序
和
快
速
排序
。这两种
排序
算法适合大规模数据
排序
,更常用。 归并
排序
和
快
速
排序
都用到了分治思想。 归并
排序
要
排序
一个数组,先把数组从中间分成前后两部分,然后对前后两部分分别
排序
,再将
排好序
的两部分合并,整个数组就有序了。 使用的分治思想,跟递归思想很像。 因为分治算法一般都是用递归实现: 分治是一种解决问题的处理思想 递归是一种编程技巧 二者不冲突。 写递归代码的技巧就是,分析
介绍一种常用的数组
元素
排序
方法
——冒泡
排序
冒泡
排序
介绍: 为什么冒泡
排序
叫做冒泡
排序
呢? 相信大家一开始都有这个疑问,在冒泡
排序
的过程中不断地比较
数组中
相邻的两个
元素
,较小者向上浮,较大者下沉,整个过程和水中气泡上升的原理相似,故叫冒泡
排序
。 冒泡
排序
的过程: 第1步,从第一个
元素
开始,将相邻的两个
元素
依次进行比较,直到最后两个
元素
完成比较。如果前一个
元素
比后一个
元素
大,则交换它们的位置。整个过程完成后,
数组中
最后一个
元素
自然就是最大值,这样也就完成了第一轮比较。 第2步,除了最后一个
元素
,将剩余的
元素
继续进行两两比较,过程与第一步相似, 这样就
C++ 语言
64,646
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章