一个人理解,查资料弄了半天,后来发现有这张图加上代码会更加容易理解快速排序,我把个人经验分享出来,希望对大家能有所帮助.
public static final void quickSort(int[] array, int start, int end) {
// i相当于助手1的位置,j相当于助手2的位置
int i = start, j = end;
int pivot = array[i]; // 取第1个元素为基准元素
int emptyIndex = i; // 表示空位的位置索引,默认为被取出的基准元素的位置
while (i < j) {
// 助手2开始从右向左一个个地查找小于基准元素的元素
while (i < j && pivot <= array[j])
j--;
if (i < j) {
array[emptyIndex] = array[emptyIndex = j];
}
while (i < j && array[i] <= pivot)
i++;
if (i < j) {
array[emptyIndex] = array[emptyIndex = i];
}
}
array[emptyIndex] = pivot;
if (i - start > 1) {
quickSort(array, 0, i - 1);
}
if (end - j > 1) {
quickSort(array, j + 1, end);
}
}
|