通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个过程递归进行,以此达到整个数据变成有序序列。
public static void main(String[] args) throws Exception{ Integer[] arr=new Integer[]{12,1,9,5,3,71,24}; quickSort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); }
private static void quickSort(Integer[] arr,int left,int right){ int lt=left; int rt=right; int temp; //找到中轴值 int pivot=arr[(lt+rt)/2]; //通过循环最终是比pivot小的在pivot左边,比pivot大的在pivot的右边 while (lt<rt){ while (arr[lt]<pivot){ lt++; } while (arr[rt]>pivot){ rt--; } //比pivot小的在pivot左边,比pivot大的在pivot的右边 if(lt>=rt){ break; } temp=arr[lt]; arr[lt]=arr[rt]; arr[rt]=temp; if(arr[lt]==pivot){ rt--; } if(arr[rt]==pivot){ lt++; } } if(lt==rt){ lt++; rt--; } //左边递归 if(left<rt){ quickSort(arr,left,rt); } //右边递归 if(right>lt){ quickSort(arr,lt,right); } }