快速排序算法详解
快速排序是一种基于交换排序思想的高效排序算法,它通常比其他排序算法快得多。其基本思想是通过一趟排序,把待排序序列分成两部分,一部分比另一部分都要小,然后再按照此方法分别对这两部分进行排序,以达到整个序列有序的目的。
实现步骤
快速排序的实现步骤如下:
-
选取一个基准元素,通常选择待排序序列的第一个元素。
-
将待排序序列分成两个子序列,按照基准元素大小比较,小于基准元素的放在其左边,大于基准元素的放在其右边。
-
对左右子序列分别进行上述两步操作,直到每个子序列只有一个元素即可。
代码实现
下面是快速排序的基本实现代码:
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[0]
left = [x for x in arr[1:] if x <= pivot]
right = [x for x in arr[1:] if x > pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
示例说明
示例1
假设有一个数组arr=[5, 3, 8, 4, 2],使用快速排序进行排序:
首先基准元素设为5,把待排序序列分成两个子序列,[3, 4, 2]和[8]。
然后对左右子序列进行同样的操作:
左子序列基准元素设为3,分成[2]和[4]两个子序列。
右子序列只有一个元素8,不需要递归操作。
最后,左子序列[2]和右子序列[8, 4]进行合并,得到[2, 3, 4, 8],整个数组变成了[2, 3, 4, 5, 8],排序完成。
示例2
假设有一个数组arr=[10, 7, 8, 9, 1, 5],使用快速排序进行排序:
首先基准元素设为10,把待排序序列分成两个子序列,[7, 8, 9, 1, 5]和[]。
然后对左子序列进行同样的操作:
左子序列基准元素设为7,分成[1, 5]和[8, 9]两个子序列。
接着对左子序列进行同样的操作:
左子序列基准元素设为1,该子序列已经有序。
右子序列基准元素设为8,分成[5]和[9]两个子序列。
接着对左子序列进行同样的操作:
左子序列基准元素设为5,该子序列已经有序。
右子序列基准元素设为9,该子序列已经有序。
最后,左子序列[1, 5]和右子序列[8, 9]进行合并,得到[1, 5, 8, 9],整个数组变成了[1, 5, 7, 8, 9, 10],排序完成。
总结
快速排序是一种高效的排序算法,其时间复杂度为O(nlogn),平均性能最好。由于其效率高,所以在大数据量的排序场景下较为常见。