/*** 快速排序
*@authormly11
**/
public classQuickSort {static int low = 0;static int high = 0;static int mid = 0;public static voidmain(String[] args) {int[] arr = {5,1,3,9,2,7,2,4};//开始的数组为
System.out.println("开始的数组为:");for(int i = 0; i < arr.length; i++){
System.out.print(arr[i]+"\t");
}
System.out.println();//排序
judge(arr);//排序后遍历
System.out.println("排序后数组为:");for(int i = 0; i < arr.length; i++){
System.out.print(arr[i]+"\t");
}
System.out.println();
}//判断数组是否为空
public static void judge(int[] arr){if(arr.length > 0){
all(arr,0,arr.length-1);
}else{
System.out.println("换个吧");;
}
}//循环条件,递归调用循环体
public static void all(int[] arr,int low,inthigh){if(low
mid =structure(arr, low, high);//当low < mid -1的时候,从low到mid-1进行递归
if(low < mid - 1){
all(arr, low, mid-1);
}//当high>mid+1时候,从mid+1到high递归
if(high > mid +1){
all(arr, mid+1, high);
}
}
}//循环体 一次循环
public static int structure(int[] arr,int low,inthigh){//当索引low小于high时,进行运算,让小于所选值在左边,否则在右边/*原理:
取出a[low]的数据存入temp,使a[low]为空;开始循环:
当low < high 时,一直循环
while(low < high){
当low从第一个开始时,从后向前一一查找,如果比temp大,则high--;
否则交换a[low]和a[high],此时a[low]的值为a[high],a[high]为空;
现在从前(a[low]被a[high]占据的位置)向后查找,如果比temp小,则low++;
否则将a[low]的位置存入a[high](上一步为空的a[high]),此时a[low]为空;
}
a[low] = temp;
返回low,此时low的位置之前数据全部a[low];*/
int temp =arr[low];while (low =temp) {
high--;
}
arr[low]=arr[high];while (low < high && arr[low]
low++;
}
arr[high]=arr[low];
}
arr[low]=temp;returnlow;/*错误的方法
while(low < high){
int temp = arr[low];
while(arr[low] <= arr[high]){
high--;
}
arr[low] = arr[high];
low++;
arr[high] = arr[low];
arr[low] = temp;
}
return low;*/}
}