快速排序c++实现

博客介绍了快速排序这一常用排序方法,利用递归实现。其思想是将序列最后一个值作为参照,遍历序列,把小于参照值的数字与前面的值替换,使参照值处于正确排序位置,还举例说明,并给出了C++代码,最终排序成功。

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

快速排序是一个非常有名的排序方法,在实际应用过程当中被选用的概率特别高。

这里的实现利用了递归的方法,快排的思想就是,做一次从第一个值到倒数第二个值的遍历,在每次把序列的最后一个当做参照,然后将小于这个值的数字与前面的值作替换,这里用到一个循环变量i,从0开始计数,也就是说循环完之后,前面的i个数字都比最后的这个参照数字小,然后将第i+1个数字与最后一个数字互换,这样,这个参照的数字就出现在了正确的排序位置上。

举例说明:最开始是[3, 1, 2],从头开始遍历,第一个数字是3,不比2小,所以不动,这时候i=0,然后第二个数字为1,比2小,则2就要与第一个位置的数字交换,就变成了[1, 3, 2],这时候i=1,循环完成了,就交换最后一个值与索引i上的值,就是交换2和3,这个时候,2就出现在了正确的位置上了,就变成了[1, 2, 3],当然如果前面不止一个数字,后面也不止一个数字,那就对前面的数组以及后面的数组递归的进行处理即可。

具体c++代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int Partition(vector<int>& nums, int p, int r);
void QuickSort(vector<int>& nums, int p, int r);
void Show(const vector<int> nums);

int main()
{
    vector<int> x{5, 2, 6, 1, 8, 4, 3};
    QuickSort(x, 0, x.size() - 1);
    Show(x);
	return 0;
}

int Partition(vector<int>& nums, int p, int r)
{
	int x = nums[r];
	int i = p - 1;
    for (int j = p; j < r; j++)
    {
    	if (nums[j] < x && j != i)
    	{
    		i++;
    		swap(nums[i], nums[j]);
    	}
    }
    swap(nums[r], nums[i + 1]);

	return i + 1;
}

void QuickSort(vector<int>& nums, int p, int r)
{
	if (p < r)
	{ 
	    int q = Partition(nums, p, r);
	    cout << q << endl;
	    Show(nums);
        QuickSort(nums, p, q-1);
        QuickSort(nums, q+1, r);
    }
    return;
}

void Show(const vector<int> nums)
{
	for (auto x : nums)
	{
		cout << x << ' ';
	}
	cout << endl;
}

代码最后的输出结果为:1 2 3 4 5 6 8
排序成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值