这里采用的是算法导论上的快速排序算法,它的主要思想是:
递归快速排序不说了,主要介绍如何做partition,首先定义两个变量i和j,i的物理意义是表示小于pivot的最后一个元素,j的物理意义是不断向前走,直到比pivot小的元素,然后和i+1元素交换。最后,要把pivot放到合适的位置,由于i表示小pivot的最后一个元素,所以要让pivot和i+1元素交换。
代码如下:
package introjava; public class QuickSort3 { public static void quickSort(int [] list, int p, int r){ int q; if(p < r){ q = partition(list, p, r); quickSort(list, p, q - 1); quickSort(list, q + 1, r); } } public static int partition(int []list, int p, int r){ int i = p - 1; int pivot = list[r]; for(int j = p; j < r; j++){ if(list[j] <= pivot){ i++; int temp = list[i]; list[i] = list[j]; list[j] = temp; } } int temp = list[i + 1]; list[i + 1] = list[r]; list[r] = temp; return i+1; } public static void main(String []args){ // int [] list = {1,2,3,4,5,6}; int [] list = {5, 2, 9, 3, 8, 4, 5, 5, 0, 1, 6, 7}; for(int i = 0; i < list.length; i++) System.out.print(list[i] + " "); System.out.print(" "); quickSort(list, 0, list.length - 1); for(int i = 0; i < list.length; i++) System.out.print(list[i] + " "); } }