快排的思想很简单,但是要手写,有些细节可能要想一阵子。看到一种相对于传统快排更简单的方式
public class Quick {
public static void quicksort(int arr[], int l, int r) {
if (l < r) {
int pivot = partition(arr, l, r);
quicksort(arr, l, pivot - 1);
quicksort(arr, pivot + 1, r);
}
}
private static int partition(int array[], int l, int r) {
int k = l;
int pivot = array[r];
for (int i = l; i < r; i++)
if (array[i] <= pivot)
swap(array, i, k++);
swap(array, k, r);
return k;
}
private static void swap(int[] array, int i, int j) {
int tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
对于partition函数,选择最后一个作为pivot。
然后从头开始遍历,k代表的是第一个大于pivot的下标,遍历一遍把小的跟k交换,k++,遍历完了那么将k与最后一个交换。那么就会达到效果