校招刷题群
高效刷题 迎战校招
校招精选试题
近年面笔经面经群内分享
Java刷题群 前端刷题群 产品运营群
首页 > 数据结构 > 快速排序
题目

快速排序在下面哪种情况下优势最明显()

A.数据有多个相同数值

B.数据基本有序

C.数据基本无序

D.数据无任何相同数值

解答

正确答案是 C

快排效率的高低取决于递归深度的深浅,
当基本有序时,会向基准元素的左边或者右边进行 高深度递归,
而基本无序时,递归的深度 远远小于高深度递归的深度
所以基本无序时,效率最高,优势最明显
C 8条回复 评论
上帝之手028

我是前年在培训班学的平面设计,总的来说只能教你一些最基础的,真正有用的东西都是在实际工作中加上自身空闲时间的摸索来学会的。

发表于 2022-02-23 23:00:00
0 0
岸然

大佬的文章让我受益匪浅,如痴如醉,以后的日子还希望能够得到大佬的谆谆指点

发表于 2021-11-16 22:00:00
0 0
企鹅哥哥

我采用排除法:

A数据有多个相同数值,而快速排序的核心就是划分和递归,多个相同数据,如果i和j都停止,那么在相同的元素间就进行无意义的交换,此时的时间复杂度为O(N^2);没优势

B数据基本有序,此时归并排序将会有很大的优势,此时的时间复杂度为o(nlog2n);快速排序没优势,归并排序有优势

发表于 2019-03-26 15:30:35
1 0
dana :

说的很有道理

发表于 2019-03-26 15:30:35
回复
咻辉

快排基本有序时退化为冒泡排序

发表于 2018-10-13 15:22:32
0 0
咸鱼王

快排基本有序的时候会增加递归深度。
比如数据是 1,2,3,4,5,6,7,8,9
每次递归都是以最小的那个数左右分隔,每次递归都是在右边,深度最大。
无序的就可以两两分了减少了深度

发表于 2018-10-13 15:22:20
0 0
先锋

属于内部排序,快速排序的实现基于分治法,具体分为三个步骤。假设待排序的序列为L[m..n]。

分解:序列L[m .. n]被划分成两个可能为空的子序列L[m .. pivot-1]和L[pivot+1 .. n],使L[m .. pivot-1]的每个元素均小于或等于L[pivot],同时L[pivot+1.. n]的每个元素均大于L[pivot]。其中L[pivot]称为这一趟分割中的主元(也称为枢轴、支点)。

解决:通过递归调用快速排序,对子序列L[m .. pivot-1]和L[pivot+1 .. r]排序。

合并:由于两个子序列是就地排序的,所以对它们的合并不需要操作,整个序列L[m .. n]已排好序。

快速排序每次将待排序数组分为两个部分,在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。

快速排序在数据基本无序情况下优势最明显。而在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用中,快速排序的平均时间复杂度为O(nlogn)。

发表于 2018-10-13 15:22:12
0 0
小可爱

当数据相同时,会增加相同数据间的交换,而数据基本有序会增加递归次数,显然递归次数增加影响更大

发表于 2018-10-13 15:21:52
0 0
虹猫

快速排序属于内部排序;

快速排序的实现基于分治法,具体分为三个步骤。假设待排序的序列为L[m..n]。

分解:序列L[m .. n]被划分成两个可能为空的子序列L[m .. pivot-1]和L[pivot+1 .. n],使L[m .. pivot-1]的每个元素均小于或等于L[pivot],同时L[pivot+1.. n]的每个元素均大于L[pivot]。其中L[pivot]称为这一趟分割中的主元(也称为枢轴、支点)。

解决:通过递归调用快速排序,对子序列L[m .. pivot-1]和L[pivot+1 .. r]排序。

合并:由于两个子序列是就地排序的,所以对它们的合并不需要操作,整个序列L[m .. n]已排好序。


快速排序每次将待排序数组分为两个部分,在理想状况下,每一次都将待排序数组划分成等长两个部分,则需要logn次划分。

而在最坏情况下,即数组已经有序或大致有序的情况下,每次划分只能减少一个元素,快速排序将不幸退化为冒泡排序,所以快速排序时间复杂度下界为O(nlogn),最坏情况为O(n^2)。在实际应用中,快速排序的平均时间复杂度为O(nlogn)。

发表于 2018-10-13 15:21:38
0 0