当前位置:首页 > TAG信息列表 > n个元素快速排序最坏要多少轮什么是快速排序?

n个元素快速排序最坏要多少轮什么是快速排序?

n个元素快速排序最坏要多少轮 什么是快速排序?

什么是快速排序?

1.如何理解快速排序

快速排序是对冒泡排序的一种改进,它是不稳定的。由c.a.r.hoare在1962年提出的一种划分交换排序,采用的是分治策略(一般与递归结合使用),以减少排序过程中的比较次数,它的最好情况o(nlogn),最坏情况o(n^2),平均时间复杂度为o(nlogn)。分而治之不是一种解决问题的算法,而是一种希望问题分解,将复杂的问题划分为多个简单问题来解决的思想。

?

n个元素快速排序最坏要多少轮 什么是快速排序?

快速排序的基本思想:

?

选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小。然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以达到全部数据变成有序。

?

快速排序的步骤:

?

(1)从数列中挑出一个

如何通过js对ipv6进行排序?

不知道你所指的排序是哪种规则排序。排序算法分类比较排序,时间复杂度为o(nlogn)~o(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等非比较排序,时间复杂度可以达到o(n),主要有:计数排序,基数排序,桶排序等。

选择排序每次比较的是数组定索引的值与全数组中每个值的大小比较,每次都选出一个最小(最大)值,如果当前索引的值大于之后索引的值,则两者进行交换。

冒泡排序每次从数组的最开始索引处与后一个值进行比较,如果当前值比较大,则交换位置。这样一次循环下来,最大的值就会排入到最后的位置。

插入排序类似于扑克牌的插入方法,选取待排列数组中的任意一个数字作为已排序的基准,再依次从待排序数组中取出数字,根据依次比较,将这个数字插入到已排序的数组中。

二分插入排序是直接插入排序的一个变种,利用二分查找法找出下一个插入数字对应的索引,然后进行插入。当n较大时,二分插入排序的比较次数比直接插入排序的最差情况好得多,但比直接插入排序的最好情况要差,所当以元素初始序列已经接近升序时,直接插入排序比二分插入排序比较次数少。二分插入排序元素移动次数与直接插入排序相同,依赖于元素初始序列。

希尔排序是一种更高效的插入排序,通过设计步长(gap)将数组分组,然后每组中单独采用排序算法将每组排序,然后在缩小步长,进行重复的分组排序工作,直到gap变为1的时候,整个数组分为一组,算法结束。

例如:数组[1,4,5,2,3,9,0,7,6],如果每次以数组长度的一半来作为步长,可以分解为以下步骤

1.gap:math.floor(9/2)4

分为四组,分组为:{1,3},{4,9},{5,0},{2,7}

最后一个数字6需要等到第5个数字排序完成,也就是3,可以得出3依旧还处在第4索引的位置,因此最后一个分组为{3,6}

完成一轮分组以及排序后的数组为:[1,4,0,2,3,9,5,7,6]

2.gap:math.floor(4/2)2

分为两组,分组为:{1,0,3,5,6},{4,2,9,7}

完成第二轮分组以及排序后的数组为:[0,2,1,4,3,7,5,9,6]

3.gap:math.floor(2/2)1

分为一组,即为:{0,2,1,4,3,7,5,9,6}

完成第三轮分组以及排序后的数组为:[0,1,2,3,4,5,6,7,9]//分类--------------内部比较排序//数据结构----------数组//最差时间复杂度----根据步长序列的不同而不同。已知最好的为o(n(logn)^2)//最优时间复杂度----o(n)//平均时间复杂度----根据步长序列的不同而不同。//所需辅助空间------o(1)//稳定性------------不稳定

vararr[1,4,5,2,3,9,0,7,6]vargapmath.floor(arr.length/2)

functionswap(arr,i,j){varttarr[j]arr[j]arr[i]arr[i]t}

for(gapgt0gapmath.floor(gap/2)){//从第gap个元素,逐个对其所在组进行直接插入排序操作for(varigapiltarr.lengthi){varji//这里采用的其实是冒泡排序while(j-gapgt0ampamparr[j]ltarr[j-gap]){//插入排序采用交换法swap(arr,j,j-gap)j-gap}//或者插入排序vartemparr[j]if(arr[j]ltarr[j-gap]){while(j-gapgt0ampamptempltarr[j-gap]){arr[j]arr[j-gap]j-gap}arr[j]temp}}}

console.log(arr)

排序步长时间插入排序


海通号 寻途旅游网

  • 关注微信关注微信

猜你喜欢

热门标签

电脑d盘不小心被格式化了怎么找回 腾讯文档怎么导出PPT word表格底色绿色怎么去掉 win10开始菜单找不到应用程序 mybatis动态标签作用 qq怎么开启扫一扫 清理手机chrome卸载残留Googleplay服务怎么删除?介绍 matlab怎么用矩阵循环语句MATLAB循环得到的数据如何存入数组或矩阵? 华为p30手机字体怎么设置华为p30怎么设置息屏文字? cad打开后vba可以自己运行吗cad可以编程吗?介绍 该如何学习Vue迎合国内市场?介绍 3d打印一般用什么软件建模 imessage激活的方法iMessage怎么登录?介绍 衣服店积分兑换短信积分兑换短信是不是真的?介绍 苹果6splus屏幕多大尺寸 ai图像识别小程序cuboai使用说明? 爱奇艺会员服务的信息怎么关闭怎么取消爱奇艺会员的自动续费? 笔记本默认应用设置在哪联想笔记本哪些自带软件可以删除? 微信怎么搜索以前加过的好友 草稿箱视频怎么保存到相册 小米智能门锁人脸识别安装过程小米智能门锁怎么连接小爱?介绍 自己的朋友圈底下的文字怎么设置为什么自己发的文字朋友圈自己看不到?介绍 excel怎么筛选删除不需要的东西excel怎么同时查找并筛选去掉多个数据? ipad怎么隐藏桌面图标平板怎么隐藏程序?介绍 小辣椒手机不支持双卡双待吗小辣椒m12手机参数?介绍 我的世界怎么备份然后导入如何手工导入已经下载的文献到endnote? 不在考勤范围怎么打卡没有打卡记录如何证明自己在上班? iphone6怎么关闭就寝闹钟苹果11闹钟关闭了还是会响?介绍 如何把搜狗浏览器设置为竖屏华为mate保时捷典藏版用哪个输入法好? 微信摇一摇歌曲怎么找回来微信摇一摇怎么看以前摇到的歌曲呢?

微信公众号