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

912. 排序数组

目录

题目链接

题目

解题思路

代码


题目链接

912. 排序数组 - 力扣(LeetCode)

题目

解题思路

法一:使用内置方法(过是能过,但是不符合题目要求)(超时)
法二:使用简单的快速排序(每次以left索引为目标值进行判断),时间复杂度高(超时)
法三:随机索引的快速排序(勉强过,相同元素会重复交换)
法四:双路快排
法五:三路快排

代码

法一:内置方法

class Solution {public int[] sortArray(int[] nums) {Arrays.sort(nums);return nums;}
}

法二:快速排序(固定索引)

class Solution {public int[] sortArray(int[] nums) {quickSort(nums,0,nums.length-1);return nums;}public void quickSort(int[] nums,int left,int right){if(left>=right){return ;}int partiIndex=partition(nums,left,right);quickSort(nums,left,partiIndex-1);quickSort(nums,partiIndex+1,right);}public int partition(int[] nums,int left,int right){int privot=nums[left];int j=left;for(int i=left+1;i<=right;i++){if(nums[i]<=privot){j++;swap(nums,i,j);}}swap(nums,left,j);return j;}public void swap(int[] nums,int i ,int j){int temp=nums[i];nums[i]=nums[j];nums[j]=temp;} 
}

法三:随机索引

import java.util.Random;
class Solution {private final static Random random=new Random(System.currentTimeMillis());public int[] sortArray(int[] nums) {quickSort(nums,0,nums.length-1);return nums;}public void quickSort(int[] nums,int left,int right){if(left>=right){return ;}int partiIndex=partition(nums,left,right);quickSort(nums,left,partiIndex-1);quickSort(nums,partiIndex+1,right);}public int partition(int[] nums,int left,int right){int idx=left+ random.nextInt(right-left+1);swap(nums,idx,left);int privot=nums[left];int j=left;for(int i=left+1;i<=right;i++){if(nums[i]<privot){j++;swap(nums,i,j);}}swap(nums,left,j);return j;}public void swap(int[] nums,int i ,int j){if(nums[i]==nums[j]) return ;int temp=nums[i];nums[i]=nums[j];nums[j]=temp;} 
}

法四:双路快排

import java.util.Random;
class Solution {private final static Random random=new Random(System.currentTimeMillis());public int[] sortArray(int[] nums) {quickSort(nums,0,nums.length-1);return nums;}public void quickSort(int[] nums,int left,int right){if(left>=right){return ;}int partiIndex=partition(nums,left,right);quickSort(nums,left,partiIndex-1);quickSort(nums,partiIndex+1,right);}public int partition(int[] nums,int left,int right){int idx=left+ random.nextInt(right-left+1);swap(nums,idx,left);int val=nums[left];int le=left+1;int ge=right;while(true){while(le<=ge &&nums[le]<val){le++;}while(le<=ge && nums[ge]>val){ge--;}if(le>=ge){break;}swap(nums,le,ge);le++;ge--;}swap(nums,left,ge);return ge;}public void swap(int[] nums,int i ,int j){if(nums[i]==nums[j]) return ;int temp=nums[i];nums[i]=nums[j];nums[j]=temp;} 
}

法五:三路快排

import java.util.Random;
class Solution {private final static Random random=new Random(System.currentTimeMillis());public int[] sortArray(int[] nums) {quickSort(nums,0,nums.length-1);return nums;}public void quickSort(int[] nums,int left,int right){if(left>=right){return ;}int idx=left+ random.nextInt(right-left+1);swap(nums,idx,left);int val=nums[left];int lt=left+1;int gt=right;int i=lt;while(i<=gt){if(nums[i]==val){i++;}else if(nums[i]<val){ swap(nums,lt,i);lt++;i++;}else{swap(nums,gt,i);gt--;}}swap(nums,left,lt-1);quickSort(nums,left,lt-2);quickSort(nums,gt+1,right);}public void swap(int[] nums,int i ,int j){if(nums[i]==nums[j]) return ;int temp=nums[i];nums[i]=nums[j];nums[j]=temp;} 
}

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

相关文章:

  • orfeotoolbox Pansharpening-全色锐化
  • TDengine 中 InterP 函数用户手册
  • 医疗AI“全栈原生态“系统设计路径分析
  • 多人协作游戏中,团队共同获取的装备如何确定按份共有或共同共有
  • 二代身份证识别技术的发展:从机器学习到深度学习
  • 【机器学习】数据理解:数据导入、数据审查与数据可视化
  • Qt小组件 - 7 SQL Thread Qt访问数据库ORM
  • gin go-kratos go-zero框架对比
  • 【后端】配置SqlSugar ORM框架并添加仓储
  • 【论文阅读 | IF 2025 | COMO:用于多模态目标检测的跨 Mamba 交互与偏移引导融合】
  • Web3.0与元宇宙:重构数字文明的技术范式与社会变革
  • 以太网供电与自愈网络对音视频系统的益处
  • 基于 elements3 包装的 可展开 table 组件
  • Elasticsearch+Logstash+Filebeat+Kibana部署
  • 前端状态管理对比:Redux与Vuex的深度分析
  • 利用 Spring 的 `@Scheduled` 注解结合简单的状态跟踪实现空闲检测方案
  • Node.js Domain 模块深度解析与最佳实践
  • 玩转Docker | 使用Docker部署vnStat网络流量监控服务
  • WPF 导入自定义字体并实现按钮悬停高亮效果
  • 微软AutoGen:多智能体协作的工业级解决方案
  • PostGres超过最大连接数报错
  • Linux LVS集群技术详解与实战指南
  • 通信算法之292:大疆DJI云哨系统-DroneID物理层协议解析-O1/O2/O3/O4机型都可以CRC正确
  • Redisson
  • 【知识图谱】Neo4j桌面版运行不起来怎么办?Neo4j Desktop无法打开!
  • C++设计模式之创建型模式
  • Qt小组件 - 6 异步运行函数
  • 暑假---作业2
  • QT技巧之快速搭建串口收发平台
  • Qt中实现文件(文本文件)内容对比