当前位置: 首页 > news >正文

快递排序Java

快速排序是在工具类常用的排序算法,快速排序的思想主要是选定一个基准元素,然后找到基准元素的位置,然后再分别排序他左边的和他右边的,快速排序是不稳定的,时间复杂度位Nlog(N),最极端的情况就是一个反向排好顺序的数组,然后每次二分都分不开导致的时间复杂度最高

@Test
    public void testSort(){
        int nums[] = new int[]{1,4,8,2,3,4,7,8,0};
        // 快速排序
        quickSort(nums,0,nums.length-1);
        Arrays.stream(nums).forEach(System.out::println);
    }
    private  void quickSort(int[] arr, int lo, int hi) {
        if(lo>=hi) return ;
        int partition=partition(arr,lo,hi);
        quickSort(arr,lo,partition-1);
        quickSort(arr,partition+1,hi);
    }


    private  int partition(int[] arr, int lo, int hi) {
        //把最左边的元素当作基准值
        int key=arr[lo];
        int left=lo;
        int right=hi+1;
        while(true) {
            //左指针遇到>=key的值,才停下
            while(arr[++left] < key) {
                if(left==hi) break;
            }

            //右指针遇到<=key的值,才停下
            while(key < arr[--right]) {
                if(right==lo) break;
            }

            if(left>=right) {
                //扫描了所有元素,结束循环
                break;
            }else {
                //交换左右指针
                swap(arr,left,right);
            }
        }
        //right指向的值一定是小于或等于key值,所以交换key和右指针的值
        swap(arr,lo,right);
        return right;
    }


    private static void swap(int[] arr, int i, int j) {
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    

总结

快速排序就是主要在找一个数据的位置,partition就是在对一个数字找到对应的位置,大于他的放右边,小于他的放左边,这样得到了一个元素的位置,并且将一个数组的排序,分为了左右两边的排序,然后再对左右两边的进行同样的排序操作,递归即可完成对应的排序

相关文章:

  • gstreamer插件开发-Adding Properties
  • 搭建自己的搜索引擎——oh-my-search使用
  • 【会议征稿通知】2024第四届神经网络、信息与通信工程国际学术会议(NNICE 2024)
  • 计算文本相似度,输出相似度最高的n个
  • web 自动化测试,一定得掌握的 8 个核心知识点
  • react-组件间的通讯
  • Chromium源码由浅入深(四)
  • python 裁剪图片并保存
  • 18、Python -- 函数入门与定义函数,多返回值函数和递归函数
  • 深度学习面试题目01
  • 每日一题 2520. 统计能整除数字的位数(简单)
  • Spring Security —漏洞防护—跨站请求伪造(CSRF)
  • MySQL数据库 #4
  • Spring MVC
  • 【Java 进阶篇】Java Servlet URL Patterns 详解
  • 高效集成|这一次,快人一步
  • 电脑怎么共享屏幕?电脑屏幕共享软件分享!
  • VB.NET 中使用SqlConnection类连接到Microsoft SQL Server数据库的详细步骤
  • Linux:firewalld防火墙-(实验2)-IP伪装与端口转发(4)
  • 用Python做数据分析之数据筛选及分类汇总
  • 深圳一季度GDP为8950.49亿元,同比增长5.2%
  • 最近这75年,谁建造了上海?
  • 春暖花开,为何皮肤却闹起了小情绪?
  • 国家发改委答澎湃:将指导限购城市针对长期摇号家庭和无车家庭等重点群体定向增发购车指标
  • 澎湃思想周报丨数字时代的育儿;凛冬已至好莱坞
  • 中国海警局新闻发言人就菲律宾非法登临铁线礁发表谈话