C++实现快速排序---思路+代码

快排的思路:
快排属于:挖坑填数+分治法”,首先令i =L; j = R; 将a[i]挖出形成第一个坑,称a[i]为基准数。然后j–由后向前找比基准数小的数,找到后挖出此数填入前一个坑a[i]中,再i++由前向后找比基准数大的数,找到后也挖出此数填到前一个坑a[j]中。重复进行这种“挖坑填数”直到i==j。再将基准数填入a[i]中,这样i之前的数都比基准数小,i之后的数都比基准数大。因此将数组分成二部分再分别重复上述步骤就完成了排序。

快排的复杂度:
快排的复杂度是:O(n*ln[n]);具体求解步骤可以参考以下这篇文章。
添加链接描述

代码:

#include "stdafx.h"
#include<iostream>
#include<vector>

using namespace std;

void quickSort(vector<int> &num, int l, int r);

int _tmain(int argc, _TCHAR* argv[])
{
	int k;
	int array[] = {3, 23, 26, 45, 56, 12, 48, 56, 45, 11, 98, 45, 632, 6484, 641, 315, 111};
	int len = sizeof(array) / sizeof(int);
	vector<int> num(array, array + len);

	cout << "排序之前:" << endl;
	for (k = 0; k < num.size(); k++)
		cout << num[k]<<",";
	cout << endl;
	quickSort(num, 0, len - 1);
	cout << "排序之后:" << endl;
	for (k = 0; k < num.size(); k++)
		cout << num[k] << ",";
	cout << endl;
	system("pause");
	return 0;
}

void quickSort(vector<int> &num, int l, int r){
	if (l >= r)     //先检查左右条件
		return;
	int i = l, j = r, x = num[l];
	while (i < j) {
		while (i < j && num[j] >= x)//从右向左找到第一个小于x的值
			j--;
		if (i < j)
			num[i++] = num[j];//填坑之后i++
		while (i < j && num[i] <= x)//从左向右找第一个大于x的值
			i++;
		if (i < j)
			num[j--] = num[i];//填坑之后j--
	}
	num[i] = x;  //把选中的x放到i处
	quickSort(num, l, i - 1);//以i为中间值,分左右两部分递归调用
	quickSort(num, i + 1, r);
}

运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值