当前位置:首页 » 操作系统 » 算法快排

算法快排

发布时间: 2025-01-01 00:55:08

1. 快速排序的算法复杂度分析

原文地址:
快速排序的算法复杂度分析
以下是快排的java算法:

大家都知道快排的时间复杂度是O(n*ln[n]),那么这个复杂度是如何计算出来的呢?

最好的情况下,每次划分对一个记录定位后,要记录的左侧子序列与右侧子序列的长度相同。在具有n个记录的序列中,一次划分需要对整个待划分序列扫描一遍,所需的时间为O(n)。

设 是对n个记录的序列进行排序的时间,每次划分后,正好把划分区域分为长度相等的连个子序列,显然T(0)=T(1) =1,则有:

最坏的情况下,待排序的记录序列正序或逆序,每次划分只能得到一个比上一次划分少一个记录的子序列,(另一个子序列为空)。此时,必须经过n-1次递归调用才能把所有记录定位,而且第i趟划分需要经过n-i次比较才能找个才能找到第i个记录的位置,因此时间复杂度为

平均情况下,设轴值记录的关键码第k小(1≤k≤n),则有:

由上式可推出如下两式:

两式相减,然后两边同除以n(n+1)得

又因为f(n)单调递减,单调有界数列极限定理,所以f(n)有界

此数称为欧拉常数,

约为 0.57721566490153286060651209

所以

所以

**如果有何处不当,请不吝赐教,一定多加完善。谢谢 **

参考资料:

【1】《算法设计与分析》第二版 王红梅

2. 快排算法是什么意思

快速排序,外文名Quicksort,计算机科学,适用领域Pascal,c++等语言,是对冒泡排序算法的一种改进。

原理:

设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。

性能分析:

快速排序的一次划分算法从两头交替搜索,直到low和hight重合,因此其时间复杂度是O(n);而整个快速排序算法的时间复杂度与划分的趟数有关。

理想的情况是,每次划分所选择的中间数恰好将当前序列几乎等分,经过log2n趟划分,便可得到长度为1的子表。这样,整个算法的时间复杂度为O(nlog2n)。

以上内容参考:网络——快排算法

3. 快排算法每趟需要花费多少辅助空间

每趟排举袜盯序需要一个辅助空间,辅助空间和趟数有关正和,最好情况是log2n ,最差的情况是n。

快速排序由C. A. R. Hoare在1960年提出。

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

(3)算法快排扩展阅读

一趟快速排序的算法是:

1、设置两个变量i、j,排序开始的时候:i=0,j=N-1;

2、以第一个数组元素作为关键数据,赋值给key,即key=A[0];

3、从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]的值交换;

4、从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]的值交换;

5、重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。

找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。

4. 快速排序和冒泡排序算法

此前由于自己对快速排序算法的认识不够,现在重新学习一遍,加深自己的认识。

快速排序算法是对冒泡算法的一种改进,大家都知道,冒泡排序是比较相邻元素的大小,而快速排序则在冒泡排序的基础上将数组分为两部分,在分别对他们进行排序,通过递归实现。

冒泡排序的实现过程:

快速排序的思想是在一个需要排序的数组A中首先选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的树都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。值得注意的是,快速排序不是一种稳定的排序算法。

一般快速排序的算法是:

快速排序实现过程:

总结:快速排序和冒泡排序各有优缺点,不过快排时间复杂度是o(nlogn),而冒牌排序在最坏的情况下的时间复杂度是o(n2),所以快速排序在提升效率上快了不少。

热点内容
安卓手机网络卡如何解决 发布:2025-01-04 03:22:46 浏览:305
安卓如何在手机上安装多个应用 发布:2025-01-04 03:09:13 浏览:212
安卓手机官服怎么设置 发布:2025-01-04 03:09:11 浏览:134
aidlandroid 发布:2025-01-04 02:50:16 浏览:835
python的单元测试框架 发布:2025-01-04 02:48:45 浏览:255
笔记本电脑配置怎么看是几代 发布:2025-01-04 02:35:29 浏览:503
安卓如何换皮换账号第五人格 发布:2025-01-04 02:25:24 浏览:864
金蝶数据库在哪 发布:2025-01-04 02:23:13 浏览:993
安卓手机的串号在哪里 发布:2025-01-04 02:16:34 浏览:222
wpa加密算法选哪个 发布:2025-01-04 02:12:18 浏览:400