快速排序的思路及代码

快速排序的思路:

快速排序是一种分治的排序算法。它的基本思路是选择一个基准元素,然后将待排序序列分成左右两个子序列,左子序列中的元素都小于等于基准元素,右子序列中的元素都大于等于基准元素。然后对左右子序列分别进行快速排序,最后将左子序列、基准元素、右子序列拼接起来得到已排序的序列。

具体的实现步骤如下:

  1. 选择一个基准元素(一般是待排序序列的第一个元素)。
  2. 遍历待排序序列,将小于等于基准元素的元素放到左边,大于等于基准元素的元素放到右边。遍历结束后,基准元素所在的位置就是最终的排序位置。
  3. 对基准元素左边的子序列和右边的子序列分别递归地进行快速排序。
  4. 递归终止条件是子序列中只有一个元素或没有元素。

快速排序的时间复杂度为O(nlogn),空间复杂度为O(logn)。
 

快速排序的代码:

#include<bits/stdc++.h>
using namespace std;
int a[1005];
void quickSort(int a[],int begin,int end){
	int i,j,tmp;
	if(begin>=end) return;
	tmp=a[begin];
	i=begin;
	j=end;
	while(i<j){
		while(a[j]>tmp)
			j--;
		while(a[i]<=tmp && i<j)
			i++;
			if(i!=j)
			swap(a[i],a[j]); 
	}
	swap(a[begin],a[i]);
	quickSort(a,begin,i-1);
	quickSort(a,i+1,end);
} 
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
		cin>>a[i];
	quickSort(a,1,n);
	for(int i=1;i<=n;i++)
		cout<<a[i];
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值