C
#include<stdio.h>
void quicksort(int left,int right,int a[])
{
if(left>=right)//不满足条件,数组长度为一,直接返回数组
return;
int i,j,base,t;//base为基准点
i=left;
j=right;
base=a[i];//令数组最左端为基准值
while(i<j)//在i,j相遇之前一直循环
{
while(a[j]>=base&&i<j)
j--;
while(a[i]<=base&&i<j)
i++;
if(a[j]<base||a[j]>base&&i<j)//满足条件,交换两值
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=base;//转置基准点
quicksort(left,i-1, a);//递归调用
quicksort(i+1,right, a);
}
int main()
{
int a[]={
5,1,9,6,3,2,8,4,7,0};
int len=sizeof(a)/sizeof(a[0]);
int i=0,j=len-1;
quicksort(i,j,a);
for(int k=0;k<len;k++)
{
printf("%d ",a[k]);
}
}
运行结果
C++(1)
#include<iostream>
#include<vector>
using namespace std;
void quicksort(int left,int right,int a[])
{
if(left>right)//不满足条件,数组长度为一,直接返回数组
return;
int i,j,base,t;//base为基准点
i=left;
j=right;
base=a[i];//令数组最左端为基准值
while(i<j)//在i,j相遇之前一直循环
{
while(a[j]>=base&&i<j)
j--;
while(a[i]<=base&&i<j)
i++;
if(a[j]<base||a[j]>base&&i<j)//满足条件,交换两值
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=base;//转置基准点
quicksort(left,i-1, a);//递归调用
quicksort(i+1,right, a);
}
int main()
{
int a[]={
5,1,9,6,3,2,8,4,7,0};
int len=sizeof(a)/sizeof(a[0]);
int i=0,j=len-1;
quicksort(i,j,a);
for(int k=0;k<len;k++)
{
cout<<a[k]<<" ";
}
}
C++(2)
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void quicksort(int left,int right,vector<int>&a)
{
if(left>right)//不满足条件,数组长度为一,直接返回数组
return;
int i,j,base,t;//base为基准点
i=left;
j=right;
base=a[i];//令数组最左端为基准值
while(i<j)//在i,j相遇之前一直循环
{
while(a[j]>=base&&i<j)
j--;
while(a[i]<=base&&i<j)
i++;
if(a[j]<base||a[j]>base&&i<j)//满足条件,交换两值
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[left]=a[i];
a[i]=base;//转置基准点
quicksort(left,i-1, a);//递归调用
quicksort(i+1,right, a);
}
int main()
{
int c[]={
5,4,6,2,8,1,3,7,0,9};
int len=sizeof(c)/sizeof(c[0]);
vector<int>a(c,c+len);
int i=0,j=len-1;
quicksort(i,j,a);
for(vector<int>::iterator it=a.begin();it!=a.end();it++)
{
cout<<*it<<" ";
}
}
运行结果