C++快速排序(含实例)

快速排序是在八大排序算法中用的频率比较高的一种,公司面试也时常会遇到,所以掌握并能熟悉使用快排是我们新人小白必须做到的。


一、原理

升序:假设有一个数组array[10],其中的元素为{ 5, 3, 9, 16, 28, 0, 4, 7, 29, 44 }。

1.首先我们需要选择一个元素作为分界值key,例如选首元素5;然后我们可以用两个变量i=0,j=9去记录数组的首尾下标。

2.从array[j]开始和key比较,如果比key大,则j自减,直到找到比key小的数(array[6]),此时判断i是否小于j(不是直接跳出循环到步骤5),如果是则将array[j]赋值给array[i](数组变成了{ 4, 3, 9, 16, 28, 0, 4, 7, 29, 44 }),然后i自增(自增只是为了少比较一次)。

3.然后我们从array[i]开始和key比较,比key小,i自增,直到找到比key大的数(array[2]),此时判断i是否小于j(不是直接跳出循环到步骤5),如果是则将array[i]给array[j](数组变成了{ 4, 3, 9, 16, 28, 0, 9, 7, 29, 44 }),然后j自减(自减只是为了少比较一次)。

4.重复以上步骤直到i==j时结束(数组变成了{ 4, 3, 0, 16, 28, 16, 9, 7, 29, 44 },此时i和j都是3);

5.循环结束后把key值赋给array[i](数组变成了{ 4, 3, 0, 5, 28, 16, 9, 7, 29, 44 });做到这里我们是不是可以发现,分界值key左边的数都比他小,而分界值key右边的数都比他大,这样我们的第一轮快排就完成了。

6.此时的5把数组分成了两个未排序数组,我们对两边继续重复上述步骤即可(递归思想)。

二、代码

#include <iostream>
using namespace std;

void QuickSort(int *arr, int start, int end)
{
	if (start >= end)
		return;
	int i = start;
	int key = arr[i];
	int j = end;
	while (i < j)
	{
		while (i < j&&key <= arr[j])
		{
			j--;
		}
		if (i < j)
			arr[i++] = arr[j];
		while (i<j&&key>=arr[i])
		{
			i++;
		}
		if (i < j)
			arr[j--] = arr[i];
	}
	arr[i] = key;
	QuickSort(arr, start, i - 1);
	QuickSort(arr, i + 1, end);
}
int main()
{
	int array[10] = { 5, 3, 9, 16, 28, 0, 4, 7, 29, 44 };
	QuickSort(array, 0, 9);
	for (int i = 0; i < 9; i++)
	{
		cout << array[i] << endl;
	}
	return 0;
}

三、结果


总结    

 快排的总体思路其实不难,只要理解了第一轮排序,基本上就掌握了快排的思想,但是我们还是要多上手实践几遍才能熟悉使用哦。

  • 10
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值