快速排序

本文深入探讨快速排序算法的基本原理、实现细节及其优化策略。包括枢轴选择、分区过程和递归调用的详细解释,同时提供了一个C++模板实现,展示了如何使用模板参数进行泛型编程来实现快速排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速排序(Quick Sort)是对起泡排序的一种改进。它的基本思想是,通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。快速排序的平均时间复杂度为Knln(n)

首先拿到枢轴位置,然后对低于枢轴位置的序列进行分区(也是排序的一个过程),再对高于枢轴位置的序列进行同样的操作。

将第一个小于枢纽的记录复制到low位置,此时还位置的记录已经被记录在privotkey中或者是复制到上一个high位置了\\将第一个小于枢纽的记录复制到low位置,此时还位置的记录已经被记录在privotkey中或者是复制到上一个high位置了

\\将顺序表进行拆分
template <typename T>
int partition(vector<T>& array,int low,int high)
{
	T privotkey = array[low];\\每次讲第一个记录作为枢纽位置

	while (low < high)
	{
		while (low < high && array[high] > privotkey)
			high--;
		array[low] = array[high];\\将第一个小于枢纽的记录复制到low位置,此时该位置的记录已经被记录在privotkey中或者是复制到上一个high位置了
		while (low < high && array[low] < privotkey)
			low++;
		array[high] = array[low];\\将第一个大于枢纽的记录复制到high位置,此时该位置记录已经被复制到前一个low位置了
	}
	array[low] = privotkey;\\将作为枢纽元素的记录复制到正确的位置
	return low;
}


\\递归调用进行排序
template <typename T>
void quick_sort(vector<T>& array,int low,int high)
{
	if (low < high)
	{
		int privotloc = partition(array,low,high);
		quick_sort(array,low,privotloc-1);
		quick_sort(array,privotloc+1,high);
	}
}

template <typename T>
void quickSort(vector<T>& array,const int length)
{
	int low = 0,high = length - 1;
	quick_sort(array,low,high);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值