算法:
方法partition(int[] list,int first,int last)
每次分割前确定一个中心位置pivot。大于pivot的放到pivot右边,小于pivot的放到pivot左边。
一直分割到所有pivot处理完毕。
public class QuickSortDemo {
public QuickSortDemo() {}
public static void main(String[] args) {
int[] intList = {2,3,2,5,6,1,-2,3,14,12};
quickSort(intList,0,intList.length-1);
for (int i:intList) {
System.out.print(i + " ");
}
}
public 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);
}
}
public 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 (high > low) {
int temp = list[high];
list[high] = list[low];
list[low] = temp;
}
}
while (high > first && list[high] >= pivot) high--;
if (pivot > list[high]) {
list[first] = list[high];
list[high] = pivot;
return high;
}
else return first;
}
}