美文网首页
快速排序算法 Java实现

快速排序算法 Java实现

作者: TUCJVXCB | 来源:发表于2019-07-30 11:16 被阅读0次

快速排序也学了几年了,一直学一直忘,最近在刷LeetCode的时候发现有几道快速选择的题目要用到快速排序的思想,现在来复习一下快速排序。


时间复杂度:
O(NlogN)

稳定性:
不稳定

思想:

  • 从数组中随机选择一个数组作为切点,第一轮排序完之后要让切点左边的数都小于这个切点,让切点右边的数都大于这个切点。
  • 之后递归的排序切点左边的数组,再递归的排序切点右边的数组。完成排序。

通俗来讲,可以把快速排序这个过程看成挖坑和填坑,首先选择切点,相当于在切点所在数组的位置挖了一个坑,然后开始从右边开始遍历数组,找到比数组小的那个数字来填上这个坑,这个数字填完这个坑之后,自己本身在的位置又出现一个坑,需要从左边来找大于切点的数来填上这个坑。以此类推,直到low == high,循环结束,然后把切点放在low这个指针处,就保证了切点左边的都小于切点,切点右边的都大于切点。

具体来看代码:

public class Test {
    public void quickSort(int[] nums, int i, int j) {
        if (i > j) {
            return;
        }

        int p = nums[i];// 我们这里选择数组第一个数作为切点
        int low = i;
        int high = j;

        while (low < high) {
            /*
                从数组的右边开始遍历,直到遇见小于切点p的数字
             */
            while (low < high && p < nums[high]) {
                high--;
            }
            /*
                找到这个数字之后,把这个数字赋值给我们我们切点的位置
             */
            if (low < high) {
                nums[low++] = nums[high];
            }
            /*
                同理,我们从数组左边开始遍历,找到小于切点P的数字为止
             */
            while (low < high && p > nums[low]) {
                low++;
            }
            /*
                找到这个数字之后,把这个数字赋值给 刚才拿到前面来的那个数字 的位置
             */
            if (low < high) {
                nums[high--] = nums[low];
            }
        }
        /*
            遍历完成之后,把切点赋值到low或者high指针处,这样就保证了切点左边的数字都小于切点,切点右边的数字都大于切点
         */
        nums[low] = p;
        /*
            递归遍历切点两边的数组
         */
        quickSort(nums, i, low - 1);
        quickSort(nums, low + 1, j);
    }

    public static void main(String[] args) {
        int[] nums = {4,7,9,2,1,8,5,6,3};
        new Test().quickSort(nums,0,8);
        for (int i : nums){
            System.out.println(i);
        }
    }
}

相关文章

  • 数据结构&算法(一)

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

  • 快速排序

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

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 一文搞定十大经典排序算法(Java实现)

    本文总结十大经典排序算法及变形,并提供Java实现。参考文章:十大经典排序算法总结(Java语言实现)快速排序算法...

  • 排序算法

    常见排序算法比较 参考资料:各种排序算法比较 参考资料:快速排序算法 必须知道的八大种排序算法【java实现】(一...

  • 数据结构02-高效排序算法

    第二章 高效排序算法 第二章 高效排序算法一、快速排序基本思想快速排序图示一次划分C 语言实现Java 语言实现算...

  • 七大排序算法之快速排序

    七大排序算法之快速排序 @(算法笔记)[排序算法, 快速排序, C++实现] [TOC] 快速排序的介绍: 快速排...

  • 五种常见排序算法实现(Java)

    Java-五种排序算法实现 前言及准备 这篇我们会介绍比较简单的五种排序算法:插入排序、冒泡排序、快速排序、选择排...

  • 7 天时间,我整理并实现了这 9 种最经典的排序算法

    回顾 我们前面已经介绍了 3 种最常见的排序算法: java 实现冒泡排序讲解 QuickSort 快速排序到底快...

  • 十大经典排序算法(java实现)

    前言 本文我们将以java代码实现十大经典排序算法,包括冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序...

网友评论

      本文标题:快速排序算法 Java实现

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