快速排序,归并排序
洛谷 P1271
#include<iostream>
#include<algorithm>
using namespace std;
int arr[100000001];
void quicksort(int left,int right){
int mid=arr[(right+left)/2];
int i=left,j=right-1;
while(i<=j){
while(arr[i]<mid)i++;
while(arr[j]>mid)j--;
if(i<=j){
swap(arr[i],arr[j]);
i++,j--;
}
}
if(left<j) quicksort(left,j+1);
if(right>i) quicksort(i,right);
}
int main(){
int n,m;cin>>n>>m;
for(int i=0;i<m;i++) scanf("%d",&arr[i]);
quicksort(0,m);
for(int i=0;i<m;i++) printf("%d ",arr[i]);
return 0;
}
洛谷 P1177
#include<iostream>
#include<algorithm>
using namespace std;
int arr[100000001];
void quicksort(int left,int right){
int mid=arr[(right+left)/2];
int i=left,j=right-1;
while(i<=j){
while(arr[i]<mid)i++;
while(arr[j]>mid)j--;
if(i<=j){
swap(arr[i],arr[j]);
i++,j--;
}
}
if(left<j) quicksort(left,j+1);
if(right>i) quicksort(i,right);
}
int main(){
int n;cin>>n;
for(int i=0;i<n;i++) scanf("%d",&arr[i]);
quicksort(0,n);
for(int i=0;i<n;i++) printf("%d ",arr[i]);
return 0;
}
洛谷 P1923
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int arr[100000001];
int quicksort(int left,int right,int k){
int mid=arr[(right+left)/2];
int i=left,j=right-1;
while(i<=j){
while(arr[i]<mid)i++;
while(arr[j]>mid)j--;
if(i<=j){
swap(arr[i],arr[j]);
i++,j--;
}
}
if(left<=j&&k<=j) return quicksort(left,j+1,k);
if(right>i&&k>=i) return quicksort(i,right,k);
return arr[k];
}
int main(){
int n,k;cin>>n>>k;
for(int i=0;i<n;i++) scanf("%d",&arr[i]);
printf("%d",quicksort(0,n,k));
return 0;
}