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

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.xdnf.cn/news/15509.html

相关文章:

  • 基于docker的redis集群
  • web前端用MVP模式搭建项目
  • Redisson实现限流器详解:从原理到实践
  • Vue加密文章密码 VuePress
  • 数据结构 双向链表(1)
  • 基于Matlab的四旋翼无人机动力学PID控制仿真
  • PyTorch 参数初始化详解:从理论到实践
  • ZYNQ Petalinux系统FLASH固化终极指南:创新多分区与双系统切换实战
  • 如何区分Bug是前端问题还是后端问题?
  • UE5多人MOBA+GAS 24、创建属性UI(一)
  • 插板式系统的“生命线“:EtherCAT分布式供电该如何实现?
  • 第13章 AB实验平台的建设
  • 解锁高效Excel技能:摆脱鼠标,快速编辑单元格
  • 凯伦股份融合复合瓦:新时代可焊接物理防腐金属屋面系统方案
  • Mysql练习
  • Linux命令大全
  • 第五章 管道工程 5.4 管道安全质量控制
  • 设计一款用于捕捉动态产品视频的摄像机器人
  • 元宇宙经济:虚实融合引发经济新变革
  • 前端学习7:CSS过渡与动画--补间动画 (Transition) vs 关键帧动画 (Animation)
  • Linux切换到Jenkins用户解决Jenkins Host key verification failed
  • 工业相机GigE数据接口的优势及应用
  • 以太网供电与自愈网络对音视频系统的益处
  • 重学前端006 --- 响应式网页设计 CSS 弹性盒子
  • ssl相关命令生成证书
  • 阿里云 RabbitMQ 可观测性最佳实践
  • 蓝光三维扫描技术:手机闪光灯模块全尺寸3D检测的高效解决方案
  • 逆功率检测设备防逆流解决方案守护电网安全
  • 智能体架构深度解构:一次用户请求的完整旅程
  • MyBatis 之分页四式传参与聚合、主键操作全解