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

快速排序的详解

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

快速排序的详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

@快速排序详解


前言 快速排序的整体思路解析

提示:以下是本篇文章正文内容,下面案例可供参考

一、快速排序的思路

1.首先选定待排序数组的第一个元素为基准值val

2.当 i 向后遍历过程中,分情况讨论
<2.1>如果当前遍历到的元素arr[i] > v 时,i++,红色区域增加即可;

i++后,就把大于等于v的元素加入到红色区域,i继续向后遍历;
<2.2>如果在遍历的过程中,arr[i]

 for (int i = l+1; i <=r ; i++) {
            if (arr[i]  

3.整个集合扫描完毕,整个区间就被我们分隔为以下情况:

4.经过以上步骤,arr[j]左侧元素均小于v,arr[j]之后的元素均 大于等于v,分区完成。继续在小于v的区间和大于v的区间继续递归上述过程,直至整个集合有序。

二、代码实现

代码如下(示例):

import java.util.Arrays;


public class QuickSort {
    
    public static void quickSort(int[] arr){
        quickSortInternal(arr,0,arr.length-1);
    }
    
    private static void quickSortInternal(int[] arr, int l, int r) {
        //先获取分区点:经过分区函数后,某个元素落在了最终的位置
        //分区点左侧元素均小于该元素,分区点右侧元素均大于等于该元素
        if (r-l<=15){
            //优化点,在元素小于15时,直接插入排序优化算法
            insertSort(arr,l,r);        
            return;
        }
        //分区函数,最终返回在[l,r]区间上分区点元素索引
        int p=partition(arr,l,r);
        //在分区元素左侧区间递归
        quickSortInternal(arr,l,p-1);
        //在分区元素右侧区间递归
        quickSortInternal(arr,p+1,r);
    }

    
    private static int partition(int[] arr, int l, int r) {
        //基准值
        int val=arr[l];
        //arr[l+1...j] < val
        //arr[j+1...i) >= val
        // i 表示当前正在扫描的元素索引
        int j=l;
        for (int i = l+1; i <=r ; i++) {
            if (arr[i] l&& arr[j] 

总结
1.基准值默认选择左侧区间的第一个元素,也可以是其他位置元素;
2.在快速排序中,当数组元素小于等于15时,进行插入排序优化算法;
3.区间的定义一定要明确,边界值的判断要清晰。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/777636.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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