快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列
选择最后一个数为基数,以基数为界将数据分为两部分,基数左侧小于基数,基数右侧大于等于基数
public static void quickSort(int left, int right, int[] arr) {
if (left>right) return;
int leftIndex = left;
int rightIndex = right;
int boundIndex = right;
int temp = 0;
while (leftIndex < rightIndex) {
/**
* 从最左侧开始寻找大于基数的数据
*/
while (leftIndex < rightIndex && arr[leftIndex] <= arr[boundIndex]) {
leftIndex++;
}
/**
* 从最右侧开始寻找小于基数的数据
*/
while (rightIndex > leftIndex && arr[rightIndex] >= arr[boundIndex]) {
rightIndex--;
}
/**
* 找到后进行交换
*/
temp = arr[leftIndex];
arr[leftIndex] = arr[rightIndex];
arr[rightIndex] = temp;
}
/**
* 最后将基数放如两部分之间
*/
if (leftIndex == rightIndex) {
temp = arr[boundIndex];
arr[boundIndex] = arr[rightIndex];
arr[rightIndex] = temp;
}
quickSort(left, leftIndex - 1, arr);
quickSort(rightIndex + 1, right, arr);
}