public static void swap(int data[],int p,int q){
int temp = data[p];
data[p] = data[q];
data[q] = temp;
}
public static void QuickSort(int data[],int start, int end){
if(start>=end) return;
int i = start;
int j = end+1;
//int temp = data[start];
while(i<j){
//① i<j是为了确保j和i不超出边界start和end
while(i<j&&data[--j]>data[start]); //②j要在前是因为要确保j最后停在小于pivot的位置上
while(i<j&&data[++i]<data[start]); //如果i在前面的话,很有可能,i=j的时候j还没有来得及移到小的位置就被i<j的条件拦在外面了
if(i<j){
swap(data,i,j);
//③不可以在这里j--,i++,会导致当二者差2位时候,同时移动到同一位置后,那个位置不确定,导致最后与pivot换位的时候的不确定性
}else break;
}
swap(data,start,j);
QuickSort(data,start,j-1);
QuickSort(data,j+1,end);
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int a[]={6,1,5,4,7,8,0,7,9,3,2,6,0};
QuickSort(a,0,a.length-1);
for(int i = 0; i<a.length; i++){ System.out.print(a[i]+",");}
}
void swap(int*p,int*q){
int temp = *p;
*p = *q;
*q = temp;
}
void QuickSort(int data[],int start, int end){
if(start>=end) return;
int i = start;
int j = end+1;
//int temp = data[start];
while(i<j){
while(i<j&&data[--j]>data[start]) ;
while(i<j&&data[++i]<data[start]) ;
if(i<j){
swap(data[i],data[j]);
}
}
swap(data[start],data[j]);
QuickSort(data,start,j-1);
QuickSort(data,j+1,end);
}
void swap(int*p,int*q){
int temp = *p;
*p = *q;
*q = temp;
}
int partition(int*d,int start, int end){
int center = (start+end)/2;
if(d[start]>d[center])
swap(d[start],d[center]);
if(d[start]>d[end])
swap(d[start],d[end]);
if(d[center]>d[end])
swap(d[center],d[end]);
swap(d[center],d[end-1]);
return d[end-1];
}
//A[start]最小作为j的警戒,pivot放在A[end-1]的地方,作为i的警戒
void QuickSort(int data[],int start, int end){
if(start>=end) return;
int pivot = partition(data,start,end);
int i = start;
int j = end-1;
//int temp = data[start];
while(i<j){
while(data[--j]>pivot) ;
while(data[++i]<pivot) ;
if(i<j){
swap(data[i],data[j]);
}
}
swap(data[i],data[end-1]);
QuickSort(data,start,i-1);
QuickSort(data,i+1,end);
}