(32)快速排序

本文详细介绍了快速排序的基本思想及其实现过程,并提供了C++代码示例。通过选择枢轴元素进行分区,快速排序能够有效地将数组分为两个子序列,然后递归地对这两个子序列进行排序。文中还分析了快速排序的时间复杂度。
摘要由CSDN通过智能技术生成

基本思想:首先将待排序记录序列中的所有记录作为当前待排序区域,从中任选一个记录(通常可选取第一个记录),以它的关键字作为枢轴,凡其关键字小于枢轴的记录均移至该记录之前,反之,凡关键字大于枢轴的记录均移动至该记录之后,这样一趟排序之后,记录将无序序列分割成两部分,再在这两部分中分别重复上述操作。

代码:

#include<iostream>
using namespace std;
void quickSort(int num[],int low,int high) {
	if (low >= high) return;
	int first = low;
	int last = high;
	int key = num[first];
	while (first < last) {
		while (first < last && num[last]>=key) { //小元素前移
			--last;
		}
		num[first] = num[last];
		while (first < last && num[first] <= key) { //大元素后移
			++first;
		}
		num[last] = num[first];
	}
	num[last] = key;
	quickSort(num, low, first - 1);
	quickSort(num, first + 1, high);
}
void main() {
	int num[12] = { 10,6,2,33,15,12,23,76,1,54,22,9 };
	quickSort(num,0,11);
	for (auto x : num) {
		cout << x << " ";
	}
	cout << endl;
	system("pause");
}

快速排序的平均时间复杂度为:O(n Log 2 n

如果待排序记录是一个按关键字有序,那么快速排序退化为气泡排序,时间复杂度为: O(n2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值