输入
多组输入,每组第一个数字为数组长度,然后输入一个一维整型数组。
输出
输出快速排序之后的一维整型数组(升序)
样例输入 Copy
6 1 8 6 5 3 4
5 12 42 2 5 8
样例输出 Copy
1 3 4 5 6 8
2 5 8 12 42
方法一:
#include<iostream>
#include<stdio.h>
using namespace std;
int Partition(int a[],int p,int r){
int i=p,j=r+1;
int x=a[p];
while(true){
while(a[++i]<x&&i<r);
while(a[--j]>x);
if(i>=j)
break;
swap(a[i],a[j]);
}
a[p]=a[j];
a[j]=x;
return j;
}
void Quicksort(int a[],int p,int r){
if(p<r){
int q=Partition(a,p,r);
Quicksort(a,p,q-1);
Quicksort(a,q+1,r);
}
}
int main(){
int n;
while(cin>>n){
int a[n];
for(int j=0;j<n;j++ ){
cin>>a[j];
}
Quicksort(a,0,n-1);
for(int i=0;i<n;i++)
printf("%d ",a[i]);
cout<<endl;
}
return 0;
}
方法二:
#include<stdio.h>
#include<stdlib.h>
void swap(int arry[],int i,int j){
int temp=arry[i];
arry[i] = arry[j];
arry[j]=temp;
}
int part(int arrx[],int p,int r){
int i=p;int j=p+1;
while(j<=r){
if(arrx[p]<arrx[j]){
i++;
swap(arrx,i,j);
j++;
}else{
j++;
}
}
swap(arrx,p,i);
return i;
}
int ran(int arry[],int p,int r){
int i=rand()%(r-p+1)+p;
swap(arry,i,p);
return part(arry,p,r);
}
void quick(int arrz[],int p,int r){
if(p<r){
int q=ran(arrz,p,r);
quick(arrz,p,q-1);
quick(arrz,q+1,r);
}
}
int main(){
int n;
int *arrx;
int c;
while(scanf("%d",&n)!=EOF){
arrx = (int*)calloc(n,sizeof(int));
for(int i=0;i<n;i++){
scanf("%d",&arrx[i]);
}
quick(arrx,0,n-1);
scanf("%d",&c);
printf("%d",arrx[c-1]);
printf("\n");
}
}
方法三:
慎用,有待更改,自己测试都可以过,但是过不了样例!!
#include<iostream>
#include<stdio.h>
using namespace std;
void qsort(int a[],int t,int w){
int i,j,k;
int x;
if(t>w) return ;
i=t,j=w,x=a[i];
while(i<j){
while((i<j)&&a[j]>x)
j--;
if(i<j){
a[i]=a[j];
i++;
}
while((i<j)&&a[i]<x)
i++;
if(i<j){
a[j]=a[i];
j--;
}
}
a[i]=x;
qsort(a,t,j-1);
qsort(a,j+1,w);
}
int main(){
int n;
while(cin>>n){
int a[n];
for(int j=0;j<n;j++){
cin>>a[j];
}
int t=0;
qsort(a,t,n);
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
cout<<endl;
}
return 0;
}