快速排序算法

一、快速排序

快速排序的最坏情况是O(n^2),比如说顺序 数列的快排。但它的平均期望是O(nlogn),且(nlogn)记号中隐含的常数因子很小,比复杂度稳定等于O(nlogn)的归并排序要小很多,所以,对绝大数顺序性较弱的随机数列而言,快速排序总要优于归并排序。

算法步骤的思想

1.从数列中挑出一个元素,称为“基准”,(pivot)。一般指定为最左边的元素。

2.重新排序数列,所有比基准值小的放在基准前面,所有元素比基准大的放在基准后面。(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区 (partition)操作。

3.递归(recursive)把小于基准值元素的子数列和大于基准元素的子数列排序。

二、动画演示

https://v.qq.com/x/page/w01315ff3b6.html   

三、代码实现 

import java.util.Arrays;

public class Sorts {
    //快速排序,递归的思想,将小于pivat的元素放在基准的左侧,将小于pivat的元素放在基准的右侧,然后分别对基准左右的序列进行快排
    public void fastSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
        //递归
        fastSort(arr, 0, arr.length - 1);
    }

    private void fastSort(int[] arr, int left, int right) {
        //递归终止条件
        if (left >= right) {
            return;
        }
        //递归操作
        //1.确定基准点(指定最左边的元素)
        int pivot = arr[left];
        //2.定义两个索引i,j。分别指向序列最左边和左右边
        int i = left;
        int j = right;
        //3.再序列中找基准点的位置
        while (i < j) {
            //从右边找比基准点小的第一个元素
            while (i < j && arr[j] > pivot) {
                j--;
            }
            if (i < j) {
                //找到之后放到i的位置
                arr[i] = arr[j];
                i++;
            }
            // 从左边找比基准点大的第一个元素
            while (i < j && arr[i] < pivot) {
                i++;
            }
                if (i < j) {
                    arr[j] = arr[i];
                    j--;
                }
            }
        //存放基准点的位置
        arr[i]=pivot;
        fastSort(arr, left, i-1);
        fastSort(arr, i+1, right);
        }
        //4.对基准左右的序列进行快排
        public static void main(String[] args) {
            Sorts sorts = new Sorts();
            int[] arr = {34, 21, 5, 67, 8, 18, 90, 56};
            sorts.fastSort(arr);
            System.out.println(Arrays.toString(arr));

        }
    }

相关博客:

史上最详细图解快速排序_快速排序图解r-CSDN博客 

十大排序之冒泡排序与快速排序(详解)-CSDN博客

  

相关推荐

  1. 排序算法——快速排序

    2024-04-14 11:24:05       58 阅读
  2. 排序算法——快速排序

    2024-04-14 11:24:05       67 阅读
  3. 排序算法-快速排序

    2024-04-14 11:24:05       71 阅读
  4. 排序算法——快速排序

    2024-04-14 11:24:05       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-14 11:24:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-14 11:24:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-14 11:24:05       87 阅读
  4. Python语言-面向对象

    2024-04-14 11:24:05       96 阅读

热门阅读

  1. 细说php语法糖

    2024-04-14 11:24:05       40 阅读
  2. 蓝桥杯python组基础知识速学!!!!

    2024-04-14 11:24:05       114 阅读
  3. MySQL基础教程(第二部分)

    2024-04-14 11:24:05       47 阅读
  4. Mysql入门基础教程(第一部分)

    2024-04-14 11:24:05       36 阅读
  5. python 解析json

    2024-04-14 11:24:05       36 阅读
  6. Golang ProtoBuf 初学者完整教程:安装

    2024-04-14 11:24:05       46 阅读