<span style="color: rgb(51, 51, 51); font-family: Arial; font-size: 14px; line-height: 26px;">基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。</span>
public class QuickSort {
private static void quickSort(int[] list, int first, int last) {
if(last >first) {
int pivotIndex=partition(list,first,last);
quickSort(list,first,pivotIndex-1);
quickSort(list,pivotIndex+1,last);
}
}
//遍历数组获得high的位置
private static int partition(int[] list, int first, int last) {
int pivot = list[first];
int low = first+1;
int high = last;
while(low < high) {
while(low<=high && list[low]<=pivot) {
low++;
}
while(low<=high && list[high]>pivot) {
high--;
}
if(low < high) {
int temp = list[high];
list[high] = list[low];
list[low] = temp;
}
}
//交换high和first位置元素,返回high
list[first] = list[high];
list[high] = pivot;
return high;
}
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] list = {2,3,2,5,6,1,-2,3,14,12};
quickSort(list,0,list.length-1);
for( int a : list) {
System.out.print(a+" ");
}
}
}