#include <iostream>
using namespace std;
int position(int data[],int begin,int end){
//将data[end]作为分隔值
if(data==NULL||begin<0||end<begin)
return -1;
int p=begin-1;//在begin与p之间,包含p处,这段区间的值都小于data[end],p+1为下一个存放小于data[end]的值的地方
int tmp;
for(int index=begin;index<end;index++)//以data[end]分隔为两个子数组
{
if(data[index]<data[end]){
tmp=data[index];
data[index]=data[++p];
data[p]=tmp;
}
}
tmp=data[++p];
data[p]=data[end];
data[end]=tmp;
return p;//这个为data[end]最后存放的位置,这个位置之前的都小于data[end],之后的都大于data[end]
}
void Qsort(int data[],int begin,int end){
if(begin==end)
return ;
int p=position(data,begin,end);
if(p>begin)
Qsort(data,begin,p-1);
if(p<end)
Qsort(data,p+1,end);
}
int main(){
int data[]={3,4,1,0,39,4,6,7};
Qsort(data,0,7);
for(int i=0;i<8;i++)
cout<<data[i]<<",";
return 0;
}
using namespace std;
int position(int data[],int begin,int end){
//将data[end]作为分隔值
if(data==NULL||begin<0||end<begin)
return -1;
int p=begin-1;//在begin与p之间,包含p处,这段区间的值都小于data[end],p+1为下一个存放小于data[end]的值的地方
int tmp;
for(int index=begin;index<end;index++)//以data[end]分隔为两个子数组
{
if(data[index]<data[end]){
tmp=data[index];
data[index]=data[++p];
data[p]=tmp;
}
}
tmp=data[++p];
data[p]=data[end];
data[end]=tmp;
return p;//这个为data[end]最后存放的位置,这个位置之前的都小于data[end],之后的都大于data[end]
}
void Qsort(int data[],int begin,int end){
if(begin==end)
return ;
int p=position(data,begin,end);
if(p>begin)
Qsort(data,begin,p-1);
if(p<end)
Qsort(data,p+1,end);
}
int main(){
int data[]={3,4,1,0,39,4,6,7};
Qsort(data,0,7);
for(int i=0;i<8;i++)
cout<<data[i]<<",";
return 0;
}