LeetCode 912. 排序数组

2023-05-16

题目

给你一个整数数组 nums,请你将该数组升序排列。

详见:912. 排序数组

思路

排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。分内部排序和外部排序,若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序。反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。内部排序的过程是一个逐步扩大记录的有序序列长度的过程。

排序算法就是指通过特定的算法因式将一组或多组数据按照既定模式进行重新排序,这种新序列遵循着一定的规则,体现出一定的规律,因此,经处理后的数据便于筛选和计算,大大提高了计算效率。

  1. 冒泡排序:多次遍历数组,每次比较相邻的两个元素,如果顺序错误则交换。排序过程中,大的元素会移动到数组的末尾
  2. 选择排序:多次遍历数组,每次在未排序的子数组中找到最小元素,将其与该子数组中的首个元素交换。如果未排序的子数组中的最小元素与首个元素相等,则不执行交换操作
  3. 快速排序:随机选择一个中间值pivot作为比较的基准,因此比这个基准小的放到左边,比这个基准大的放到右边
  4. Arrays.sort()方法:使用时间复杂度为O(nlogn)的API排序

代码

方法一:冒泡排序

class Solution {
    public int[] sortArray(int[] nums) {
        boolean needNextPass = true;
        int length = nums.length;
        for (int i = 1; i < length && needNextPass; i++) {
            needNextPass = false;
            for (int j = 0; j < length - i; j++) {
                if (nums[j] > nums[j + 1]) {
                    int temp = nums[j];
                    nums[j] = nums[j + 1];
                    nums[j + 1] = temp;
                    needNextPass = true;
                }
            }
        }
        return nums;
    }
}
  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)

方法二:选择排序

class Solution {
    public int[] sortArray(int[] nums) {
        int length = nums.length;
        for (int i = 0; i < length; i++) {
            int currMinIndex = i;
            for (int j = i + 1; j < length; j++) {
                if (nums[j] < nums[currMinIndex]) {
                    currMinIndex = j;
                }
            }
            if (currMinIndex != i) {
                int temp = nums[i];
                nums[i] = nums[currMinIndex];
                nums[currMinIndex] = temp;
            }
        }
        return nums;
    }
}
  • 时间复杂度:O(n)
  • 空间复杂度:O(1)

方法三:快速排序

class Solution {
    public int[] sortArray(int[] nums) {
        quickSort(nums, 0, nums.length - 1);
        return nums;
    }

    private void quickSort(int[] nums, int low, int high){
        if(low < high){
            int mid = partition(nums, low, high);
            quickSort(nums, low, mid - 1);
            quickSort(nums, mid + 1, high);
        }
    }

    private int partition(int[] nums, int low, int high){
        int pivot = low + (int) (Math.random() * (high - low + 1));
        swap(nums, pivot, low);
        int i = low, j = low + 1;
        while (j <= high){
            if(nums[j] < nums[low]){
                swap(nums, j, ++i);
            }
            j++;
        }
        swap(nums, low, i);
        return i;
    }

    private void swap(int[] nums, int i, int j){
        int tmp = nums[i];
        nums[i] = nums[j];
        nums[j] = tmp;
    }
}
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(logn)

方法四:Arrays.sort()

class Solution {
    public int[] sortArray(int[] nums) {
        Arrays.sort(nums);
        return nums;
    }
}
  • 时间复杂度:O(nlogn)
  • 空间复杂度:O(1)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCode 912. 排序数组 的相关文章

  • 7:Multithreading-Java API 实战

    目录 1 问题的提出2 核心数 进程 线程3 进程和线程的区别以及对应应用4 多线程程序含义 多线程的作用5 多线程的执行过程6 Runnable7 简化操作以及线程名8 抢购鞋 多线程案例9 后台 守护进程的提出10 匿名内部类创建多线程
  • 8:Java Conllections FrameWork-Java API 实战

    目录 1 原生数组带来的问题 xff0c 抛出问题2 Conllections家族3 黑帮的帮规4 ArrayList第一讲5 ArrayList第二讲6 ArrayList第三讲7 Linked链表8 LinkedList一带而过9 提醒
  • 9:JDBC-Java API 实战

    目录 1 说明2 JDBC的由来以及定义3 JDBC体验 xff0c statement executeQuery 查询4 整理和释放5 封装JDBCUtils6 增删改 executeUpdate 7 字符编码问题8 PreparedSt
  • 10:Java人脸识别认证-Java API 实战

    目录 1 提出问题 xff0c 引入SDK的概念2 选择平台3 SDK下载和文档说明4 人脸检测5 人脸对比6 建议和结束语 1 提出问题 xff0c 引入SDK的概念 什么是SDK xff1f 我们并不具备开发人脸识别的能力 xff0c
  • 个人学习笔记附Markdown格式下载

    B S方向 文章链接 xff1a https blog csdn net qq 46207024 article details 114378676 spm 61 1001 2014 3001 5502 下载链接 xff1a https d
  • Ubuntu/Linux 访问 Windows 共享文件夹

    文章目录 Ubuntu Linux 访问 Windows 共享文件夹SMB 协议安装 samba 客户端访问共享文件夹参考资料 Ubuntu Linux 访问 Windows 共享文件夹 SMB 协议 Linux 操作系统与 Windows
  • Java 序列化与反序列化

    目录 一 说明二 理解三 实现1 实现接口2 序列化方法3 反序列化方法 一 说明 序列化与反序列化是什么 序列化 xff1a 将Java对象表示为一个字节序列 xff0c 存储对象数据到文件中 xff0c 可用于网络传输 反序列化 xff
  • JavaMail 使用POP3/SMTP服务发送QQ邮件

    目录 一 说明二 理解三 实现1 导入jar包2 用户认证3 发送邮件创建步骤简单的Email带HTML的E mail带图片的Email包含附件的邮件 一 说明 邮件服务器 为用户提供接收邮件的功能 xff0c 有发邮件的SMTP服务器 x
  • Java多线程 Callable和Future

    目录 一 说明二 理解三 实现1 实现接口2 执行线程 一 说明 Java 提供了三种创建线程的方法 实现 Runnable接口继承 Thread类本身通过 Callable和 Future 创建线程 Callable和Future的引入
  • Java多线程 Future和FutureTask的区别

    目录 一 说明二 理解三 实现1 实现接口2 使用Future3 使用FutureTask 一 说明 Future和FutureTask的关系 Future 是一个接口 xff0c 无法直接创建对象 xff0c 需配合线程池使用 submi
  • Java多线程 CompletionService和ExecutorCompletionService

    目录 一 说明二 理解三 实现1 使用Future2 使用ExecutorCompletionService3 take 方法4 poll 方法5 poll long timeout TimeUnit unit 方法 一 说明 Future
  • Java多线程 线程池Executor框架

    目录 一 说明二 理解ExecutorExecutorServiceExecutors 三 实现1 newSingleThreadExecutor2 newFixedThreadPool3 newCachedThreadPool4 newS
  • Java多线程 ThreadPoolExecutor自定义线程池

    目录 一 说明二 理解三 实现1 SynchronousQueue2 ArrayBlockingQueue3 LinkedBlockingQueue 一 说明 ThreadPoolExecutor Java提供的线程池Executor框架相
  • Java多线程 ThreadPoolExecutor-RejectedExecutionHandler拒绝执行策略

    目录 一 说明二 理解三 实现1 AbortPolicy2 DiscardPolicy3 DiscardOldestPolicy4 CallerRunsPolicy5 自定义拒绝执行策略 一 说明 RejectedExecutionHand
  • Java多线程 关闭线程池 shutdown() 、shutdownNow()、awaitTermination()

    目录 一 说明二 理解三 实现1 shutdown 2 shutdownNow 3 awaitTermination 一 说明 ThreadPoolExecutor 继承 Executor 接口它有多个构造方法来实现自定义创建线程池 xff
  • Java多线程 线程池的生命周期及运行状态

    目录 一 说明二 理解三 实现 一 说明 线程池的生命周期 线程池的状态runState和工作线程数量workerCount共同保存在 AtomicInteger 类型的控制变量 ctl 中ctl高三位保存运行状态 23 61 8 gt 5
  • Unable to determine the device handle for GPU 0000:02:00.0: GPU is lost.

    TITAN X Pascal 的显卡 xff0c 当 batch size 过大爆显存时 xff0c 就会出现 GPU丢失 的错误
  • Java文档注释 Intellij IDEA Generate JavaDoc

    目录 一 说明二 理解三 实现 一 说明 文档注释 Java Doc Comments 是指允许你在程序中嵌入关于程序的信息 xff0c 使你更加方便的记录你的程序的信息你可以使用Javadoc工具软件来生成信息 xff0c 并输出到HTM
  • Java 泛型

    目录 一 说明二 理解三 实现1 泛型类2 泛型方法3 类型通配符 一 说明 泛型 generics 本质是参数化类型 xff0c 所操作的数据类型被指定为一个参数提供编译时类型安全检测机制 xff0c 允许程序员在编译时检测到非法的类型
  • STC51单片机-中断控制LED-物联网应用系统设计项目开发

    目录 一 说明二 重点三 实现四 下载 一 说明 单片机中 中断 处理主要是指单片机暂停当前主程序的执行 xff0c 而去执行更重要或需急迫处理的事件请求的处理程序 xff0c 处理完成后 xff0c 再回到主程序暂停处继续执行 这个事件叫

随机推荐