思想:
选择一个基准元素,通常选择第一个或者最后一个元素,假设选择是第一个元素,拿第一个元素与最后一个元素进行比较,如果最后的元素的值大于当前的基准元素,则不动,跟最后一个元素比完跟第二个元素比较,若小于则两者交换位置,这样一趟下来,就把数组分为左右两部分,左边小于基准元素,右边大于等于基准元素,基准元素在中间;然后进行递归即可。
public class KuaiSu {
public static void quickSort(int [] a,int low,int high){
if(low < high){
int middle = getMiddle(a,low,high);
quickSort(a,low,middle-1);
//quickSort(a,middle+1,high);
}
}
public static int getMiddle(int [] a,int low,int high){
//数组的第一个元素作为中轴
int temp=a[low];
//将数组内的元素进行值比较,这个循环是肯定能进去的
while(low<high){
//当最后一个元素的值比第一个元素的值大时
while(low < high && a[high] >= temp){
high--;
}
a[low]=a[high];
//这个地方要有等于号
while(low < high && a[low] <= temp){
low++;
}
a[high]=a[low];
}
a[low] = temp;
return low;
}
public static void main(String args[]){
int a [] = new int[]{49,38,65,97,76,12,45,23,1,0};
//传入一个数组,0表示基准元素,a.length-1表示最后一个元素
quickSort(a, 0, a.length - 1);
for (int i : a) {
System.out.println(i);
}
}
}