当前位置: 首页 > 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就是在对一个数字找到对应的位置,大于他的放右边,小于他的放左边,这样得到了一个元素的位置,并且将一个数组的排序,分为了左右两边的排序,然后再对左右两边的进行同样的排序操作,递归即可完成对应的排序

http://www.dtcms.com/a/3073.html

相关文章:

  • 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做数据分析之数据筛选及分类汇总
  • Python武器库开发-面向对象篇(六)
  • 数字驱动,营销赋能丨工商职院电子商务专业学生,前往餐饮美食电商新业态基地试岗交流
  • RunnerGo UI自动化使用流程
  • Spring Boot集成SpringFox 3.0与Pageable参数处理
  • C51--单片机中断
  • 025-第三代软件开发-实现需求长时间未操作返回登录界面
  • AUTOSAR汽车电子嵌入式编程精讲300篇-基于CAN总线的温度场测量装置的研究与设计
  • 单源最短路径 -- Dijkstra
  • 【Docker从入门到入土 5】 使用Docker-compose一键部署Wordpress平台
  • Kafka-Java四:Spring配置Kafka消费者提交Offset的策略