排序算法:快速排序

本文详细介绍了快速排序算法的基本思想、切分过程以及如何进行算法改进,特别是针对含有大量重复元素的数组进行优化的三项切分快速排序。快速排序由于其高效的性能,即使在最坏情况下也能保持较好的平均效率,因此在实践中被广泛应用。
摘要由CSDN通过智能技术生成

快速排序

快速排序时目前广泛应用的一种排序算法。它的实现简单,适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。

基本算法

快速排序是一种分治的排序算法。它将一个数组分成两个子数组,将两部分独立地排序。快速排序和递归排序是互补的:归并排序将两个数组分别排序,并将有序的子数组归并以将整个数组排序;而快速排序将数组排序的方式则是当两个子数组都有序时整个数组也就自然有序了。所以区别就是,在第一种情况中,递归调用发生在处理整个数组之前;在第二种情况中,递归调用发生在处理整个数组后。在归并排序中,一个数组被等分成两半;在快速排序中,切分(partition) 的位置取决于数组的内容。
在这里插入图片描述

void QuickSort(int arr[], int lo, int hi) {
   //快速排序
	if (lo < hi) {
   
		int pivot = partition(arr, lo, hi);//划分
		QuickSort(arr, lo, pivot - 1);//将左半边排序
		QuickSort(arr, pivot + 1, hi);//将右半边排序
	}
}

该方法的关键是切分,这个过程使数组满足三个条件:
1.对于某个pivot,arr[pivot] 已经排定;
2.从arr[lo]arr[pivot-1] 中所有元素都不大于arr[pivot]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值