内容简介:快速排序是一种排序算法,速度比选择排序快得多,其主要基于“分而治之”的思想对集合进行排序,本文将对该算法进行分析。D&C主要指利用递归的方式来不断的缩小需要处理问题的规模,最终使问题容易解决。使用D&C解决问题的过程包括两个步骤。(1) 找出递归的终止条件,这种条件必须尽可能简单(称为基线
1. 原理介绍
快速排序是一种 排序 算法,速度比选择排序快得多,其主要基于“分而治之”的思想对集合进行排序,本文将对该算法进行分析。
2. 分而治之(D&C)的思想
D&C主要指利用递归的方式来不断的缩小需要处理问题的规模,最终使问题容易解决。使用D&C解决问题的过程包括两个步骤。
(1) 找出递归的终止条件,这种条件必须尽可能简单(称为基线
条件)。
(2) 不断将问题分解(或者说缩小规模),直到符合递归的终止条件(称为归纳条件)。
为了便于理解,举个例子。
假设有一个数组A=[2,4,6], 想要统计A所有元素的和,可以使用两种方式
- 遍历A,并将结果一个一个的加起来
- 使用D&C思想,通过不断缩小集合的规模,最终把每次递归的结果加起来,流程如下
代码如下:
// 使用dc的思想统计一个数组元素的和
func Sum(ints [] int) int {
if len(ints)==1{
//当集合只有一个元素时,返回结果
return ints[0]
}
subArr := ints[1:]
//每次递归的时候,传个Sum的集合数量都比上一次少一个元素
return ints[0]+Sum(subArr)
}
3. 快速排序的原理
快速排序的流程大概分为两步:
-
确定递归的终止条件:对于排序操作而言,如果数组为空或只包含一个元素,则只需原样返回数组且不用排序。因此数组为空或只包含一个元素可以作为循环结束的条件
-
如果没有满足递归终止条件,需要将数组分解,并做以下操作,直到满足递归终止条件。
2.1. 从数组中选择一个元素,这个元素被称为基准值
2.2. 将数组分成两个子数组:小于基准值的元素和大于基准值的元素
2.3. 对步骤2产生的两个子数组再执行快速排序操作
假设要对[2,1,3,5,4]进行排序,选择了3为基准值,则流程大概如下:
对于快速排序,在基线条件中,我证明这种算法对空数组或包含一个
元素的数组管用。在归纳条件中,如果快速排序对包含一个元素的数组管用,对包含两个元素的数组也将管用;如果它对包含两个元素的数组管用,对包含三个元素的数组也将管用,以此类推。因此,可以说明快速排序对任何长度的数组都管用。
4. 运行时间分析
快速排序的平均情况运行的时间复杂度为O(n log n),但在最糟糕的情况下其复杂度将为O(n^2),下面对两种情况进行分析
4.1 最糟糕情况
下面来看看到底啥时候才会出现最糟糕的情况,考虑如下的排序:
快速排序的性能高度依赖于你选择的基准值。假设你总是将第一个元素用作基准值,且要处
理的数组是有序的。由于快速 排序算法 不检查输入数组是否有序,因此它依然尝试对其进行排序,需要进行N层操作,每层需要比较N个数。所以算法复杂度为O(n^2)
4.2 最佳情况
考虑如下排序:
该图也是对有序数组进行排序,但每次都选择中间的元素作为基准值,此时递归的次数变成了3次(logN),每次也是需要比较N个元素,所以算法复杂度为O(n log n)
5. 代码实现
为了简单演示,代码都始终选用第一个元素作为基准值
Python版本:
def quicksort(array):
if len(array) < 2:
return array
else:
pivot = array[0]
less = [i for i in array[1:] if i <= pivot]
greater = [i for i in array[1:] if i > pivot]
return quicksort(less) + [pivot] + quicksort(greater)
print quicksort([3,5,6,2,6,2])
- D&C将问题逐步分解。使用D&C处理列表时,基线条件很可能是空数组或只包含一个元
素的数组。 - 快速排序的平均运行时间为O(n log n)。
- 当数组有序,始终选择第一元素作为基准值时,快速排序将出现最糟情况
- 当数组有序,始终选择中间元素作为基准值时,快速排序将出现最佳情况
以上所述就是小编给大家介绍的《算法快学笔记(四):快速排序的原理与实现》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 算法之常见排序算法-冒泡排序、归并排序、快速排序
- 排序算法之冒泡排序改进算法
- 快速排序算法,C语言快速排序算法深入剖析
- 排序算法下——桶排序、计数排序和基数排序
- 数据结构和算法面试题系列—排序算法之快速排序
- 数据结构和算法面试题系列—排序算法之基础排序
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Persuasive Technology
B.J. Fogg / Morgan Kaufmann / 2002-12 / USD 39.95
Can computers change what you think and do? Can they motivate you to stop smoking, persuade you to buy insurance, or convince you to join the Army? "Yes, they can," says Dr. B.J. Fogg, directo......一起来看看 《Persuasive Technology》 这本书的介绍吧!