快速排序
我们要对下面这个数组进行从小到大排序
数组如下:
{12, 32, 4, 78, 1, 14, 78, 51, 13, 98, 10, 64, 101, 3}
介绍第三种排序算法,快速排序。
核心思想:
- 我们先拿角标 0 上的元素作为基准数,然后从右边开始像左边检索,发现一个比基准数小的元素后,将角标停下来,然后再从左边开始向右边检索,发现一个比基准书大的元素,将角标停下,然后将两个元素互换。
- 再继续从左右两边索引,直到左边两边的角标重叠。然后再将基准数和中间的角标换位。这样就形成了一个基准数在中间索引,索引左边的元素都是比基准数小的元素,索引右边的元素都是比基准数大的元素。
- 再递归式的将索引左边的元素进行快速排序,将索引右边的元素进行快速排序。
- 最后完成排序。
示例代码:
package com.evan.quick_sort;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] array = {12, 32, 4, 78, 1, 14, 78, 51, 13, 98, 10, 64, 101, 3};
System.out.println("排序前: " + Arrays.toString(array));
quickSort(array, 0, array.length - 1);
System.out.println("排序后: " + Arrays.toString(array));
}
public static void quickSort(int[] array, int leftIndex, int rightIndex) {
int i = leftIndex;
int j = rightIndex;
int baseElement = array[leftIndex];
while(i < j) {
while(array[j] >= baseElement && i < j) {
j--;
}
while(array[i] <= baseElement && i < j) {
i++;
}
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
if(i == j) {
int temp = array[i];
array[i] = array[leftIndex];
array[leftIndex] = temp;
}
if(leftIndex < i - 1) {
quickSort(array, leftIndex, i - 1);
}
if(rightIndex > i + 1) {
quickSort(array, rightIndex, i + 1);
}
}
}