【八大排序】快速排序

目录

目录

前言

一、排序规则

划分规则

二、代码实现

 总结


前言

快速排序(Quicksort),是对冒泡排序算法的一种改进。快速排序算法通过多次比较和交换来实现排序。

特点:数据越乱排序速度越快,越有序排序速度越慢。

时间复杂度最好O(nlogn) 最坏情况O(n^2)  平均时间复杂度O(nlogn)  

空间复杂度O(nlogn)  

稳定性:不稳定


一、排序规则

将数组内第一个元素作为我们的基准值,然后以基准值进行划分,划分出两部分,小于基准值都在基准值左边,大于基准值都在基准值右边,继续按照同样的规则去划分这两部分,直到所有的元素都放在自己合适的位置。

划分规则

1.从右向左找比基准值小的,放左边。

2.从左向右找比基准值大的,放右边

3.反复执行1.2直到left与right相遇

我们设立一组值:{6,3,2,1,9,8,7};

对其进行快速排序,如下图所示:

与冒泡排序类似,但是以基准值进行分隔后,使其对数组元素的遍历次数降低,降低了时间复杂度。

二、代码实现

//根据基准值对其进行划分,然后返回基准值所在下标
int Partition(int arr[], int left, int right)
{
	int tmp = arr[left];

	while (left < right)
	{
		//1.从右向左找,比基准值小的  放进去
		while (left<right && arr[right]>tmp)
			right--;
		if (left == right)
		{
			break;
		}
		arr[left] = arr[right];

		//2.从左向右找,比基准值大的  放进去
		while (left < right && arr[left] <= tmp)
			left++;
		if (left == right)
		{
			break;
		}
		arr[right] = arr[left];
	}
	//此时left==right

	arr[left] = tmp; //arr[right]=tmp;
	return left;
}
void Quick(int arr[], int left, int right)
{
	if (left < right)//保证left到right之间最少有两个值
	{
		int par = Partition(arr, left, right);
		if (left < par - 1)//保证基准值左边部分最少有两个值
		{
			Quick(arr, left, par - 1);
		}

		if (par + 1 < right)//保证基准值右边部分最少有两个值
		{
			Quick(arr, par + 1, right);
		}
	}
}
void QuickSort(int arr[], int len)
{
	Quick(arr, 0, len - 1);
}

 总结

以上为快速排序的排序规则和代码实现,本文简单介绍了快速排序的实现,快速排序的思想可以帮助问题的分解,而且快速排序还有许多种优化方式,是值得深度思考的排序方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值