网上大部分快速排序算法都是依据《算法导论》来实现的,无一例外都是左右指针各走一步来实现快速排序。我觉得这种不是那么的好理解,而使用单向扫描要更好理解一点。
public class QuickSortTest {
public static void main(String[] args) {
int[] arr = {2,1,6,1,4};
quickSort(arr, 0, arr.length - 1);
print(arr);
}
private static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
private static void quickSort(int[] arr, int p, int r) {
if (p < r) {
int q = partition(arr, p, r);
quickSort(arr, p, q - 1);
quickSort(arr, q + 1, r);
}
}
private static int partition(int[] arr, int pivot, int r) {
int p = pivot + 1;
int bigger = r;
while (p <= bigger) {
if (arr[p] <= arr[pivot]) {
p++;
} else {
swap(arr, p, bigger);
bigger--;
}
}
//最后还要一次交换
swap(arr, pivot, bigger);
return bigger;
}
private static void swap(int[] arr, int p, int bigger) {
//交换元素
int t = arr[p];
arr[p] = arr[bigger];
arr[bigger] = t;
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。