C++排序代码:快速排序

/*
快速排序:采用函数的递归,对待排序列分成两部分进行排序。
分类:取最左边元素作为参照元素,或者中间元素
排序稳定性:不稳定
时间复杂度:O(N*logN)
空间复杂度:O(1)
*/

#include<iostream>
using namespace std;

int a[8] = { 36,25,48,12,25,43,20,28 };

//快速排序
void QuickSort(int left, int right) {
	if (left > right) return;
	int i = left, j = right;
	int base = a[left];
	//先整个处理,再分段处理
	while (i < j) {
		while (i < j && a[j] >= base) j--;  //i右移到大于参考值处
		while (i < j && a[i] <= base) i++;  //j左移至小于参考值处
		if (i < j) {
			swap(a[i], a[j]);  //交换i和j处数值
		}
	}
	swap(a[left], a[i]);  //交换参考值
	QuickSort(left, j - 1);  //左段进行快排
	QuickSort(j + 1, right);  //右段进行快排
}

int main() {

	int n = 8;
	QuickSort(0, n - 1);

	//打印输出
	for (int i = 0; i < n - 1; i++) {
		cout << a[i] << " ";
	}
	cout << a[n - 1] << endl;

	return 0;
}

全部评论
楼主,有一个问题,就是我看这个快速排序用到递归,然后递归的出口是if (left > right) return;想不明白怎么会出现left > right呢?
点赞 回复 分享
发布于 2024-02-21 17:10 山西

相关推荐

点赞 评论 收藏
分享
评论
2
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务