美文网首页
快速排序(Java版)

快速排序(Java版)

作者: lkmc2 | 来源:发表于2018-02-27 21:47 被阅读33次

快速排序的原理是选出一个元素A,并将该元素与其他未排序的元素进行比较,把值比A小的元素放在A的左边,把值把A元素大的放在A的右边,以此类推。

快速排序的平均时间复杂度为O(nlogn), 最好的时间复杂度为O(nlogn),最坏时间复杂度为O(n^2)。

/**
 * Created by lkmc2 on 2018/2/27.
 */

public class QuickSort {
    
    /**
     * 快速排序
     * @param array 数组
     * @param left 左边起始下标
     * @param right 右边结束下标
     */
    public static void quickSort(int[] array, int left, int right) {
        if (left >= right) return; //左下标大于右下标,方法结束

        int position = partition(array, left, right); //排序好中间元素后获取分界点坐标
        quickSort(array, left, position - 1); //对分界点左边进行快速排序
        quickSort(array, position + 1, right); //对分界点右边进行快速排序
    }

    /**
     * 将数组进行划分
     * 此方法运行完后,left到i位置的元素都将小于value,i到j-1位置的元素都将大于value
     * arr[left + 1...i] < value ,arr[i + 1...j-1] > value
     * @param array 数组
     * @param left 左边起始下标
     * @param right 右边结束下标
     * @return 分界点坐标
     */
    private static int partition(int[] array, int left, int right) {
        int value = array[left]; //取数组第一个元素作为比较对象
        int index = left; //选取最左边的下标作为i

        for (int j = left + 1; j <= right; j++) { //j为进行移动的下标,从第二个元素开始
            if (array[j] < value) { //当j位置的元素的值小于value
                int temp = array[index + 1]; //交换j与index+1位置元素的值
                array[index + 1] = array[j];
                array[j] = temp;
                index++; //index下标加一
            }
        }

        int temp = array[left]; //交换temp与index位置元素的值
        array[left] = array[index];
        array[index] = temp;
        return index; //返回value所在的分界点坐标
    }

    public static void main(String[] args) {
        int[] array = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
        quickSort(array, 0, array.length - 1);

        for (int num : array) {
            System.out.print(num + " ");
        }
    }

}
快速排序运行结果

相关文章

  • 快速排序

    手写java版快速排序算法实现

  • Javascript快速排序

    快速排序大众版 快速排序成人版

  • 快速排序(Java版)

    快速排序的原理是选出一个元素A,并将该元素与其他未排序的元素进行比较,把值比A小的元素放在A的左边,把值把A元素大...

  • 快速排序 --- Java版

    算法思路 确定pivot分界点 定义两个左右指针i,j分别指向arr[0]和arr[len - 1], 然后比较和...

  • 快速排序 --- 基础实践篇

    本篇主要介绍快速排序的基本代码。 大纲 普通版的快速排序 改进版的快速排序 快速排序应用----求前K个最大的数 ...

  • 快速排序

    快速排序Java实现

  • java排序方法资料

    java排序,效率高的是哪种排序方法 JAVA快速排序(高效) java中常用的几种排序算法 相关代码: /* *...

  • 数据结构&算法(一)

    一、Java实现快速排序算法 二、Java实现折半插入排序算法 三、Java实现冒泡排序算法

  • 面试知识点

    排序冒泡排序快速排序选择排序插入排序二路归并 查找二分查找 排序和查找的java实现 java语言Java字符串字...

  • 常见排序的java实现

    常见排序的java实现 常见排序java实现 插入排序(二分插入排序) 希尔排序 快速排序(三数中值快排) 冒泡排...

网友评论

      本文标题:快速排序(Java版)

      本文链接:https://www.haomeiwen.com/subject/eufvxftx.html