排序算法——快速排序

本文介绍了快速排序算法的原理,包括选择基准数、分区操作和递归调用,提供了C++代码实现,以及一个输入样例和输出结果。
摘要由CSDN通过智能技术生成

问题描述:

输入一个整数N(<100)表示需要排序数字的个数,随后一行输入N个数据,用空格隔开,请使用快速排序算法将它们按照从小到大的顺序排列,然后输出结果。

算法思想:

(1)在无序数据中选一个基准数(通常为数据第一个);

(2)将数据中小于基准数的数据移到基准数左边,大于基准数的移到右边;

(3)对于基准数左、右两边的数据,不断重复以上两个过程,直到每个子集只有一个元素,即为全部有序。

输入样例:

请输入需要排序的数字的个数:
10
请输入需要排序的序列:
23 45 18 11 13 79 72 25 3 17

输出样例:

排序后的序列为:
3 11 13 17 18 23 25 45 72 79

运行截图:

程序代码:

#include<iostream>
using namespace std;
void quickSort(int* arr, int begin, int end)//arr:需要排序的数组,begin:需要排序的区间左边界,end:需要排序的区间的右边界
{
	if (begin < end)//如果区间不只一个数
	{
		int temp = arr[begin]; //将区间的第一个数作为基准数
		int L = begin; //从左到右进行查找时的“指针”,指示当前左位置
		int R = end; //从右到左进行查找时的“指针”,指示当前右位置
		while (L < R)//不重复遍历
		{
			while (L<R && arr[R] > temp)//当右边的数大于基准数时,略过,继续向左查找。
				//不满足条件时跳出循环,此时的R对应的元素是小于基准元素的
				R--;
			arr[L] = arr[R];//将右边小于等于基准元素的数填入右边相应位置
			while (L < R && arr[L] <= temp)//当左边的数小于等于基准数时,略过,继续向右查找。
				//(重复的基准元素集合到左区间)。
				//不满足条件时跳出循环,此时的i对应的元素是大于等于基准元素的
				L++;
			arr[R] = arr[L];//将左边大于基准元素的数填入左边相应位置
		}
		arr[L] = temp;//将基准元素填入相应位置,此时的L即为基准元素的位置
		quickSort(arr, begin, L - 1);//对基准元素的左边子区间进行相似的快速排序
		quickSort(arr, L + 1, end);//对基准元素的右边子区间进行相似的快速排序
	}
	else  return;//如果区间只有一个数,则返回
}
int main()
{
	int n = 0;
	/*输入需要排序的数字的个数*/
	cout << "请输入需要排序的数字的个数:" << endl;
	cin >> n;
	int num[100] = { 0 };//定义一个数组,用来存放需要排序的序列。
	/*输入需要排序的序列*/
	cout << "请输入需要排序的序列:" << endl;
	for (int i = 0; i < n; i++) {
		cin >> num[i];
	}
	quickSort(num, 0, n - 1);
	cout << "\n排序后的序列为:" << endl;
	for (int i = 0; i < n; i++) {
		cout << num[i] << ' ';
	}
	cout << endl;
	system("pause");
	return 0;
}
  • 13
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^好想吃糖^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值