栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

算法——java快排(快速排序)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

算法——java快排(快速排序)

手写java快排(快速排序)代码——双边循环法,本人亲测哈哈!!

package com.abc.backend.algo;

import java.util.Arrays;


public class QuickSort {

    // 精髓在于,每一次传入的startIndex与endIndex都是基于递归中的“上一次”传进来的,而不是“最开始”的那两个值。
    public static void func(int[] nums, int startIndex, int endIndex){
        
        
        if(startIndex >= endIndex){ //注意这里是“ >= ”
            return;
        }

        int pivotIndex = funcExt(nums, startIndex, endIndex);
        
        func(nums, startIndex, pivotIndex-1);
        func(nums, pivotIndex+1, endIndex);
    }

    public static int funcExt(int[] nums, int startIndex, int endIndex){
        //取基准数(第一个或者随机,这里取第一个)
        int pivot = nums[startIndex];
        int left = startIndex;// 换个词好理解
        int right = endIndex;//换个词好理解

        while (left != right){

            while(left != right &&  nums[right] > pivot){ // 循环挪指针过程中,首先保证left与right不相遇。如果相遇,则跳出循环,交换pivot与“重合数”
                right--;
            }
            while(left != right && nums[left] <= pivot){ // 循环挪指针过程中,首先保证left与right不相遇。如果相遇,则跳出循环,交换pivot与“重合数” // 这里有个等号,因为pivot与num[left]每轮开始时都相等
                left++;
            }

            
            //{
            //    System.out.println("交换前数组:" + Arrays.toString(nums));
            //    System.out.println("交换前索引:[0][1][2][3][4][5][6][7]");
            //    System.out.println("交换索引位:" + left + "<<<>>>" + right);
            //}
            if(left != right){ // left与right相遇了,就不需要自己与自己交换了,浪费资源
                int t = nums[right];
                nums[right]=nums[left];
                nums[left]=t;
            }
            //{
            //    System.out.println("交换后数组:" + Arrays.toString(nums));
            //    System.out.println("==================");
            //}
        }
        
        nums[startIndex]=nums[left];
        nums[left]=pivot;

        return left;
    }

    public static void main(String[] args) {
        int[] nums = {4,7,3,5,6,2,8,1};
        // int[] nums = {8,1};
        QuickSort.func(nums, 0, nums.length-1);
        System.out.println(Arrays.toString(nums));
    }
}

暑期编程PK赛 得CSDN机械键盘等精美礼品!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1016487.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号