java排序算法之快速排序

排序算法之快速排序

快速排序

简介

快速排序由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));

    }

有问题记得留言!


记得每天微笑 在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值