快递排序Java

news/2024/5/19 23:51:30 标签: 1024程序员节, 快速排序

快速排序是在工具类常用的排序算法,快速排序的思想主要是选定一个基准元素,然后找到基准元素的位置,然后再分别排序他左边的和他右边的,快速排序是不稳定的,时间复杂度位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.niftyadmin.cn/n/5118768.html

相关文章

J2EE的N层体系结构

J2EE平台采用了多层分布式应用程序模型&#xff0c;实现不同逻辑功能的应用程序被封装到不同的构件中&#xff0c;处于不同层次的构件可被分别部署到不同的机器中。 RMI/IIOP&#xff1a;RMI&#xff08;Remote Method Invocation&#xff0c;远程方法调用&#xff09;是Java的…

基于卷的磁盘扫描算法设计

1、设计目的 常规情况下&#xff0c;当我们扫描计算机的硬盘时&#xff0c; 通常会使用诸如FindFirstFile/FindNextFile(Windows)&#xff0c;或者opendir/readdir(Linux)遍历扫描的目录。 一般情形下&#xff0c;由于文件数量相对较少&#xff0c;文件夹层次低&#xff0c;扫…

力扣-python-两数相加

题解 1: # Definition for singly-linked list. # class ListNode(object): # def __init__(self, val0, nextNone): # self.val val # self.next nextclass Solution(object):def addTwoNumbers(self, l1, l2):""":type l1: ListNode:t…

woyaojiangzhang

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 博主接触FineReport帆软报表有一段时间了&#xff0c;正好前几天做了一个任务日历的需求&#xff0c;把每天完成的任务量直观的展示在日历上&#xff0c;方便管理者更好的监控各业务的完成情况&#xff0c;做完后想着…

Netty框架详解

一、Netty简介 Netty是一款基于Java NIO的网络编程、高性能、异步事件驱动的网络应用框架。它的设计目标是提供简单易用、高性能、可扩展的网络编程框架。 二、Netty主要特点 高并发&#xff1a;Netty使用异步的、非阻塞的I/O模型&#xff0c;通过事件驱动的方式处理网络操作…

linux可用内存不足如何排查清理

在 Linux 系统中&#xff0c;如果可用内存不足&#xff0c;可能会导致性能下降和系统响应变慢。以下是一些排查和清理可用内存不足问题的方法&#xff1a; 1. 查看内存使用情况&#xff1a; 使用 free 命令来查看系统内存使用情况&#xff0c;包括已使用、可用和缓存的内存量…

有没有好用的AI配音软件啊?(带情绪的)

很多视频里的声音都很好听&#xff0c;有的字正腔圆&#xff0c;有的情感真挚&#xff0c;有的激昂慷慨&#xff0c;有的忧伤动人&#xff0c;但你知道吗&#xff1f;这些都不是真人配音的效果&#xff0c;而是配音软件制作合成的效果。一个好的配音可以起到事半功倍的效果。今…

MSVCR100.dll丢失修复方法,MSVCR100.dll丢失的解决方法

今天我要和大家分享的是&#xff1a;msvcr100.dll丢失的6种解决方法。 首先&#xff0c;让我们来了解一下msvcr100.dll丢失的原因。msvcr100.dll是Microsoft Visual C 2010的一个组件&#xff0c;它包含了许多运行库文件&#xff0c;这些文件是许多应用程序所必需的。当msvcr1…