快速排序算法的C++实现

最近不是在学习算法吗,然后学到了快速排序,我感觉这个排序挺棒的,然后我就试着自己实现了一下,没想到还真不容易,中途也出现了各种各样的错误,好在我没有放弃,在掉了一地头发之后,终于让我实现了,开心,,,,
在这里插入图片描述
首先介绍一下快速排序:
快速排序算法通过多次比较和交换来实现排序,其排序流程如下:
(1)首先设定一个分界值,通过该分界值将数组分成左右两部分。
(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。
(3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
(4)重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

好了,直接上代码

#include<iostream>
using namespace std;
template<typename T>//可以进行各种数据类型的排序
void Qsort(int left,int right,T arr[])//指向两边
{
	if (left < right)//必不可少 否则递归不停
	{
		//快速排序
		int l = left;
		int r = right;
		int base = arr[left];
		while (l < r)
		{
			//找到左边第一个大于base的数和右边第一个小于base的数并交换
			while (l < r&&arr[r] >= base)r--;
			while (l < r&&arr[l] <= base)l++;
			if (l < r)
			{
				int temp = arr[l];
				arr[l] = arr[r];
				arr[r] = temp;
			}
		}
		//将base值与l和r 重合的值交换(做到了base左边的数比base小 base右边的数比base大)
		arr[left] = arr[l];//注意:此处是小写的L而不是数值1
		arr[l] = base;
		//用递归对左右两边进行同样的操作
		Qsort(left, r - 1, arr);
		Qsort(r + 1, right, arr);
	}
}
int main()
{
	int arr[10];
	int i;
	for(i = 0; i < 10; i++)
	{
		cin >> arr[i];//自己输入 可以测试更多组值
	}
	Qsort(0, 9, arr);
	for (i = 0; i < 10; i++)
	{
		cout << arr[i] << endl;
	}
	return 0;
}

好了,以上就是我对快速排序的理解啦,可能会有纰漏,望大家指正,谢谢。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值