数据结构与算法——快速排序

来源:互联网 发布:caffe ubuntu 编辑:程序博客网 时间:2024/05/24 11:14

冒泡系列,冒泡排序的升级版(个人理解为二分冒泡)

这里写图片描述

代码实现:

/** * 快速排序 *  * @author kushanmao * @date 2017-7-8 */public class QuickSort {    /**     * 划分数组     */    public static int partition(long[] arr, int left, int right, long pivot) {        int leftPos = left - 1;        int rightPos = right;        while (true) {            // 将比pivot小的移动到左边            while (leftPos < rightPos && arr[++leftPos] < pivot);            // 将比pivot大的移动到右边            while (leftPos < rightPos && arr[--rightPos] > pivot);            if (leftPos >= rightPos) {                break;            } else {                long tmp = arr[leftPos];                arr[leftPos] = arr[rightPos];                arr[rightPos] = tmp;            }        }        long tmp = arr[leftPos];        arr[leftPos] = arr[right];        arr[right] = tmp;        return leftPos;    }    public static void display(long[] arr) {        System.out.print("[");        for (int i = 0; i < arr.length; i++) {            System.out.print(arr[i] + "  ");        }        System.out.print("]");    }    /**     * 排序     * @param arr     * @param left     * @param right     */    public static void sort(long[] arr, int left, int right) {        if (right - left <= 0) {            return;        } else {            // 获取关键字            long point = arr[right];            // 获取切入点,同时划分数组            int pivot = partition(arr, left, right, point);            // 对左边数组排序            sort(arr, left, pivot - 1);            // 对右边数组排序            sort(arr, pivot + 1, right);        }    }}

总结:快速排序是一种冒泡排序,但是不像简单冒泡排序一个个的移动,而是将数组划分成两部分,相对于关键字小的在一边,大的在一边,如此重复,直至排序完毕;

原创粉丝点击