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

算法快排

发布时间: 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-03-06 02:16:04 浏览:43
编译笔记 发布:2025-03-06 02:11:17 浏览:913
linux源码学习 发布:2025-03-06 02:06:05 浏览:556
极坐标图编程 发布:2025-03-06 01:52:23 浏览:306
centos访问网页 发布:2025-03-06 01:51:18 浏览:972
海康威视华为云服务器 发布:2025-03-06 01:36:20 浏览:701
安卓手机怎么把三张图片拼在一起 发布:2025-03-06 01:31:50 浏览:320
文件夹删除不了权限 发布:2025-03-06 01:28:06 浏览:302
如何上传swf 发布:2025-03-06 01:18:22 浏览:366
安卓机有什么好玩的游戏 发布:2025-03-06 01:15:47 浏览:569