原理
快排就是快速排序嘛,是冒泡排序的优化.
冒泡是每一轮相邻两两元素比较,然后交换,直到最后一轮,结束.
快排的话,就是找数组最左边的元素作为一个基准数,然后经过两边的元素跟基准数作比较再交换后,基准数左边都是比基准数小的数,右边都是比基准数大的数.然后以基准数为界将数组分为两部分,此时基准数已经归位.
然后这两部分再执行上面的操作,所有的基准点都归位.
就是比如数组0号位置,和arr.length-1号位,有两个哨兵i和j,
哨兵i对应在0号索引位,哨兵j在最后一个元素的索引位(arr.length-1),
还有一个基准数用来做给哨兵i和哨兵j做参照的.基准数为数组第一位(0号索引位的元素),
然后右边的哨兵j先开始向左移动,找比基准数小的数,找到停下来,然后左边的哨兵i向右移动,找到比基准数大的数,停下来,然后i和j找到的数相互交换,都找完都进行交换,直到哨兵i和哨兵j相遇.然后基准数和他两相遇的数进行交换,这个基准数就归位了,基准数左边都是比他小的数,右边都是比他大的数,然后基准值左边的这部分我们暂且叫做数组a,右边的叫做数组b,
a和b都进行上面的操作,直到所有基准都归位.
代码
package arithmetic;
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = {8, 1, 6, 4, 11, 22, 5};
quicklySort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quicklySort(int[] arr, int i, int j) {
if (i > j) {
return;
}
int low = i;
int high = j;
int base = arr[low];
while (i < j) {
while (arr[j] >= base && i < j) {
j--;
}
while (arr[i] <= base && i < j) {
i++;
}
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
arr[low] = arr[i];
arr[i] = base;
quicklySort(arr, 0, j - 1);
quicklySort(arr, j + 1, high);
}
}