Java中常见的排序方式-快速排序(升序)

Posted 化身孤岛的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中常见的排序方式-快速排序(升序)相关的知识,希望对你有一定的参考价值。

【基本思想】

快速排序在元素较多的情况下,排序效率是相当高的。其基本思想是这样:

假设数组为int[] arr = { 49, 38, 65, 97, 76, 13, 27, 22, 26, 41, 13, 17, 32 },数组元素个数为13个。

选定a[0]为left标记,a[12]为right标记,基准点pivot的初始位置一般也为a[0](其值记为p)。

定义i,j分别代表了不断变化的left和right标记。

此时,先让基准点归位。即以p为基准,左侧元素均小于p,右侧元素均大于p。

具体即为:

1.左标记不断右移,比较p与所在位置元素的大小,若比p大,停止比较,记下此点;

2.右标记不断左移,比较p与所在位置元素的大小,若比p小,停止比较,记下此点;

3.交换左右标记;

4.直至左右标记重合,这个位置就是基准点的位置。

然后被基准点分开的这两小段序列重复上述步骤。

【代码实现】

    public static void quickSort(int[] arr, int left, int right) {
        // 如果left不小于right,需要排序的部分只有一个元素,方法结束调用。
        if (left >= right) {
            return;
        }
        // 将最左侧的元素设置为pivot(基准点)
        int p = arr[left];
        // 把比p小的放到左边,比p大的放到右边。
        int i = left, j = right;
        while (i < j) {
            // j向左移,找到一个比p小的元素。
            while (arr[j] >= p && i < j) {
                j--;
            }
            // i向右移,找到一个比p大的元素。
            while (arr[i] <= p && i < j) {
                i++;
            }
            // i和j交换。
            if (i < j) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        // 让基准点归位,此时i与j是相同的,用谁都行。
        arr[left] = arr[i];
        arr[i] = p;
        // 基准点左侧序列的元素递归进行快速排序。
        quickSort(arr, left, i - 1);
        // 基准点右侧序列的元素递归进行快速排序。
        quickSort(arr, i + 1, right);
    }

 

以上是关于Java中常见的排序方式-快速排序(升序)的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(Java)——No4.常见的排序算法

经典十大排序算法(含升序降序,基数排序含负数排序)Java版完整代码建议收藏系列

数据结构之排序算法Java实现—— 交换类排序之快速排序算法

常见排序算法详解(冒泡选择插入快速希尔归并)

常见的链表排序(Java版)

java实现快速排序