调用
public static void quick_sort(int f[],int from,int to) {
if(from>=to)
return;
int compare=partition(f, from, to);
quick_sort(f, from, compare-1);
quick_sort(f, compare+1, to);
}
第一种
思路:f[to]为比对值。然后先i、j分别从左右查询比compare打的、小的。然后交换数据位置。
public static int partition(int f[],int from,int to) {
int compare=f[to];
int i=from,j=to;
while(true) {
while(i<j&&f[i]<=compare) {
i++;
}
if(i>=j)
break;
f[j]=f[i];
while(i<j&&f[j]>=compare) {
j--;
}
if(i>=j)
break;
f[i]=f[j];
}
f[j]=compare;
return j;
}
第二种
思路:分割为四块区域:
- from到i为比compare小的
- i+1到 j 比compare大
- j+1 到 to-1 为为判断区域
- to 为比较值
public static int partition(int f[],int from,int to) {
int compare=f[to];//存储比较值
int i=from-1,j=from;
int temp;
while(j<to) {
if(f[j]<=compare) {
i+=1;
temp=f[j];
f[j]=f[i];
f[i]=temp;
}
j++;
}
f[to]=f[i+1];
f[i+1]=compare;
return i+1;
}