C++ 原位快速排序

参考资料
很多程序语言标准库实现排序的内置算法就是快速排序,这里使用C++自己实现。

#include<iostream>
using namespace std;

//left和right主要是为了标记排序起止位置,方便递归调用,左闭右开区间
void quikSort(int a[], int n, int left, int right)
{
	if (left < right)/*递归出口,即当起止位置相同时(即元素个数为0时)就不需要递归了;实际上元素个数为1时就不需要递归了,因此也可以是设置条件为left+1<right,结果一致*/
	{
		int mid = a[left];//第1个元素作为对比基准
		int l = left + 1;//所以从第2个元素开始对比
		int r = right - 1;//右开区间,所以实际上右边第1个元素下标要减去1
		
		while (true)
		{
			while (l <= r && a[l] < mid)//从左边遍历,直至找到一个大于基准的元素为止
				l++;
			while (l <= r && a[r] >= mid)//从右边遍历,直至找到一个小于基准的元素为止
				r--;
			if (l > r)//如果左边指针大于右边指针,说明已经遍历完毕,结束循环
				break;
			else//否则置换左右指针元素,使大的到右侧,小的到左侧
			{
				int temp1;
				temp1 = a[l];
				a[l] = a[r];
				a[r] = temp1;
			}
		}
		
		a[left] = a[r];//置换基准元素与右指针指向的元素,基准处于中间位置
		a[r] = mid;
		quikSort(a, n, left, r);//递归快速排序基准左侧元素
		quikSort(a, n, r + 1, right);//递归快速排序基准右侧元素
	}
}

int main()
{
	const int n = 11;
	int a[n] = { 3,-5,-6,5,6,-76.-453,-768,-7,90,34 };
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;

	quikSort(a, n, 0, n);
	for (int i = 0; i < n; i++)
	{
		cout << a[i] << " ";
	}
	cout << endl;
	system("pause");
	return 0;
}

运行结果:
快速排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值