快速排序(线性描述)

系列文章目录

冒泡排序(线性描述)

快速排序(线性描述)

建设中…



前言

快速排序是所有排序算法中时间复杂度最低的算法,是排序算法学习无法绕开的一环,也是学习分治法的很好的例子。


提示:在学习快排之前需要熟练掌握递归

一、快速排序原理简介

快速排序是基于分治思想的一种排序算法,请你想象一下,在你玩弄俄罗斯套娃时,首先你将这组套娃以“比一个特定的套娃大”与“比一个特定的套娃小”的规则分为两组,而分出的两组依然以上述规则分为两组,直到最后无法分组时,俄罗斯套娃也就分配好了。
而这也就是快排的核心思想——分而治之。

二、算法解析

1.时间复杂度分析

o(nlog(n))
证明过程:建设中。

2.代码实现

#include <bits/stdc++.h>
using namespace std;
int n;
long long a[100001];
void mysort(int ,int );
int main(){
	scanf ("%d",&n);
	for (int i=1;i<=n;i++)	scanf ("%lld",&a[i]);
	mysort (1,n); 
	for(int i=1;i<=n-1;i++)	printf ("%lld ",a[i]);
	printf ("%lld\n",a[n]);
	return 0;
}
void mysort(int l,int r){
	int z,key,i=l,j=r;
	key=a[(l+r)/2];
	while (i<=j){//对于每个分组完全一致的处理。
		while (a[i]<key)	i++;
		while (a[j]>key)	j--;
		if (i<=j){
			swap(a[i],a[j]);
			i++;
			j--;
		}
	}
	if (l<j)mysort (l,j);//分治
	if (r>i)mysort (i,r);
}

总结

快排只是看起来比较吓人,实际上等你理解后,会发现快排并不比希尔排序,基数排序难上多少。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值