欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java排序算法之快速排序

程序员文章站 2022-03-24 13:52:40
...

排序算法之快速排序

快速排序

简介

快速排序由C. A. R. Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

白话文

先把数组中的一个数当做基准数 一般以第一个数为基准数(看你喜好),定义2个参数一个是i,一个是j ,i作为第一个索引,j作为最后一个索引
然后从两边开始检索。

  • 先从右边开始检索
  1. 若该数字大于基准数 ,就继续检索, j的索引-1。
  2. 若该数字小于基准数,就停下。
  • .再从左边开始检索
  1. 若数字小于基准数,就继续检索, i 的索引+1。
  2. 若数字大于基准数,就停下。
  • 然后交换这个2个元素
  • 若两个索引相遇
  • 先把相遇位置的数字与第一个索引的数字互换
  • 再把相遇的数字与基准数字互换
  • 交换结束 会发现 相遇位置的数左边都比它小,右边的都比他大
  • 最后利用递归的方式 排序

代码

 public static void qsort(int arr[], int start, int end) {
 
        //进行判断,如果左边的索引大于右边的索引 直接结束循环
        if (start > end) {
            return;
        }

        //定义变量保存基准数
        int base = arr[start];
        //定义变量i 作为最左边的数
        int i = start;
        //定义变量j 作为最右边的数
        int j = end;

        //当i<j 的时候 进行操作
        while (i != j) {
            //由j从右像左检索 若找到比基准数小的就停下
            //若比基准数大的就继续检索
            while (arr[j] >= base && i < j) {
                //从右向左移动
                j--;
            }
            //i从左向右检索 若这个数大于基准数就停下
            // 若比他小或等于就继续检索
            while (arr[i] <= base && i < j) {
                //从左往右移动
                i++;
            }
            //当走到这里的时候 说明找到了合适的数字
            // 需要交换i与j位置的元素
            int temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        //若循环结束  说明i与j相遇
        arr[start] = arr[i];
        //这个时候就需要把基准数与相遇位置的元素交换
        //把基准数赋值给相遇位置的数
        arr[i] = base;
        qsort(arr, start, i - 1);
        qsort(arr, j + 1, end);

        return;
    }

    public static void main(String[] args) {
        int arr[] = {1, 3, 2, 9, 6, 0, 23423, 4};
        int len = arr.length - 1;
        qsort(arr, 0, len);
        System.out.println(Arrays.toString(arr));

    }

有问题记得留言!


记得每天微笑 java排序算法之快速排序java排序算法之快速排序java排序算法之快速排序