P1923 【深基9.例4】求第 k 小的数&&P1177 【模板】快速排序

First
Second


快速排序还是很重要的

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdio>
using namespace std;
int zn[5000001];
int n,Aimee;
void qs(int l,int r){
	int ll=l;int rr=r;int mid=zn[(l+r)/2];
	do{
		while(zn[rr]>mid){
			rr--;
		}
		while(zn[ll]<mid){
			ll++;
		}
		if(ll<=rr){
			swap(zn[ll],zn[rr]);
			ll++;
			rr--;
		}
	}while(ll<=rr);
	if(l<rr) qs(l,rr);
	 if(r>ll)
	qs(ll,r);
}
int main(){
	scanf("%d",&n);
	for(int i=1;i<=n;++i){
		scanf("%d",&zn[i]);
	}
	qs(1,n); 
	for(int i=1;i<=n;++i){
		cout<<zn[i]<<" ";
	}
	return 0;
}
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstdio>
using namespace std;
int zn[5000001];
int n,Aimee;
void qs(int l,int r,int aim){
	int ll=l;int rr=r;int mid=zn[(l+r)/2];
	do{
		while(zn[rr]>mid){
			rr--;
		}
		while(zn[ll]<mid){
			ll++;
		}
		if(ll<=rr){
			swap(zn[ll],zn[rr]);
			ll++;
			rr--;
		}
	}while(ll<=rr);
	if(aim<=rr) qs(l,rr,aim);
	else if(aim>=ll)
		qs(ll,r,aim);
	else{
		cout<<zn[rr+1];
		exit(0);
	}
}
int main(){
	scanf("%d%d",&n,&Aimee);
	for(int i=1;i<=n;++i){
		scanf("%d",&zn[i]);
	}
	qs(1,n,Aimee+1); 
	return 0;
}
posted @ 2020-11-02 20:50  Simex  阅读(108)  评论(0编辑  收藏  举报