洛谷 P1177 【模板】快速排序 (模板)

P1177 【模板】快速排序

题目描述

利用快速排序算法将读入的NN个数从小到大排序后输出。

快速排序是信息学竞赛的必备算法之一。对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成。(C++选手请不要试图使用STL,虽然你可以使用sort一遍过,但是你并没有掌握快速排序算法的精髓。)

输入输出格式

输入格式:
第1行为一个正整数N,第2行包含N个空格隔开的正整数ai
,为你需要进行排序的数,数据保证了Ai 不超过1000000000
输出格式:
将给定的N个数从小到大输出,数之间空格隔开,行末换行且无空格。

#include<iostream>
#include<stdio.h>
using namespace std;
int a[100005];
void mysort(int i,int j){
	int m,n,temp;
	int k;
	m=i;
	n=j;
	k=a[(i+j)/2];
	while(m<=n){
		while(m<=n&&a[m]<k)//如果k左边的小于k  m就往后指 
		++m;
		while(n>=m&&a[n]>k)//如果k右边的大于k  n就往前指
		--n;
		if(m<=n){           //否则 m<=n时就交换 
			temp=a[m];
			a[m]=a[n];
			a[n]=temp;
			m++;             //交换之后m向后指一位,n向前指一位 防止陷入死循环 
			n--;
		}
	}
	if(m<j)                 //递归 
	mysort(m,j);
	if(n>i)
	mysort(i,n);	
}
int main()
{
	int n;
	cin>>n;
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	mysort(0,n-1);	
	for(int i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	return 0;
} 



作者:徐小宝
注 :本博客属于中国石油大学胜利学院ACM协会所有!

猜你喜欢

转载自blog.csdn.net/weixin_43805821/article/details/84946351