C++快速排序

C++快速排序

开发工具与关键技术:C++、VisualStudio
作者:何任贤
撰写时间:2019年08月01日
快速排序就是排序速度很快的排序方法,那么它到底是怎么排序的?首先我们需要一个数组如arr{2,4,1,3,5},然后需要两个变量x、y,x是arr数组的第一个索引值,y是arr数组的最后一个索引值,也就是x = 0、y = 4,我们现在还需要一个基准数tmp,那么基准数一般是第一个元素做基准数也就是tmp = arr[x],x和y是索引值,tmp是元素值,升序排序大概是这样的,就是tmp和arr[y]比较 如果tmp小于arr[y]那么y--,直到tmp大于arr[y],然后arr[x] = arr[y],x++然后tmp和arr[x]比较,小于tmp,x++,大于tmp,arr[y] = arr[x],这时arr数组的元素顺序应该是{1,2,4,3,5},然后就是分成两个递归,递归1把x和y变成x=0,y=0重新执行刚才的步骤,递归2把x和y变成x=2,y=4重新执行刚才的步骤,递归的结束条件就是x>=y就结束递归。下面就是一个快速排序的例子和运行结果。

#include
using namespace std;

void quickSort(int s[], int l, int r)
{
// 递归结束的条件
if (l >= r)
{
return;
}
int i = l; // 开始位置
int j = r; // 最后一个元素的位置
// 基准数
int tmp = s[l]; // 取第一个元素作为基准数 – i的位置是坑
while (i < j) // 循环判断
{
// j位置的元素, 大于等于基准数
while (i<j && s[j] >= tmp)
{
// 前移
j–;
}
// 找到了填坑的数
if (i < j)
{
// 填坑
s[i] = s[j]; // j变成坑
i++;// i后移
}
// 移动i, 坑不移动
// i位置的元素 小于基准数
while (i < j && s[i] < tmp)
{
i++;
}
// 找到了大于等于基准数的元素
if (i < j)
{
// 填后边的坑
s[j] = s[i];
// j前移
j–;
}
}
// i j 相遇 i==j
// 填坑
s[i] = tmp;
// 拆分左半部分
quickSort(s, l, i - 1);
// 右
quickSort(s, i + 1, r);
}
int main()
{
int i;
//定义整型数组
int array[] = { 12, 5, 33, 6, 10 };
//计算数组长度
int len = sizeof(array) / sizeof(int);
//遍历数组
cout << "待排序数组序列: ";
for (i = 0; i < len; ++i)
{
cout << array[i] << " ";
}
cout << “\n”;
quickSort(array, 0, len - 1); //排序
cout << "快速排序之后的序列: ";
for (i = 0; i < len; ++i) //遍历
{
cout << array[i] << " ";
}
cout << “\n”;
return 0;
}
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值