2.快速排序

来源:互联网 发布:淘宝水印制作 编辑:程序博客网 时间:2024/05/21 09:50

2.快速排序

  • 快速排序
    • 前言
    • 实现思路
    • 实现代码
    • 运行


前言

快速排序可以说是所有排序算法里最常用、最优秀、最效率的算法。它是冒泡排序的改进版。就像它的名字一样,“快速”!


实现思路

实现思路是非常有趣的:
- 1.先一个基准数(一般选择第一个数。即,index = 0)。
- 2.来个while,从数组最右边开始找比基准数小的数,记录下标为 r。
- 3.在再来个while,从数组最左边开始找比基准数大的数,记录下边为l。
- 4.交换两个数的位置。即下标 r 和下标 l 的数交换。
- 5.当找到r == l 的时候。即,相遇的时候,第一次排序已经完成。此时,必然走到数组的中间的数。
- 6.基准数(index = 0)和 中间数交换。
- 7.此时原来的基准数到了中间,根据原来的基准数切分为两个数组(都不包含原基准素)。
- 8.分别给两个数组做 上诉 1-7 的操作(开始递归)。


实现代码

    public <T extends Comparable<T>> void quickSorting(T[] array, int left, int right) {        int r, l;        if (left > right) return;        // 基准数        T temp = array[left];        l = left;        r = right;        while (l != r) {            /**             * 要先从右往左找             * 如果比基准数大,就一直找下去,直到找到比基准数小的             */            while ((array[r].compareTo(temp) >= 0) && l < r) r--;            /**             * 要先从左往右找             * 如果比基准数小,就一直找下去,直到找到比基准数大的             */            while ((array[l].compareTo(temp) <= 0) && l < r) l++;            if (l < r) {                /**                 * 交换                 */                T t = array[l];                array[l] = array[r];                array[r] = t;            }        }        /**         * 基准数与中间位置的数字交换         */        array[left] = array[l];        array[l] = temp;        /**         * 继续处理左边的,这里是一个递归的过程         */        quickSorting(array, left, l - 1);        /**         * 继续处理右边的,这里是一个递归的过程         */        quickSorting(array, l + 1, right);    }

运行

    public static void main(String args[]) {        Integer[] object = {26, 19, 7, 37, 27, 57, 67, 99, 87, 17};        QuickSort quickSorting = new QuickSort();        quickSorting.quickSorting(object, 0, object.length - 1);        System.out.println("\n快速排序\n");        for (int i : object) {            System.out.print(i + " ");        }    } 
0 0
原创粉丝点击