当前位置: 首页 > 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.lryc.cn/news/590777.html

相关文章:

  • 基于Spring AI Alibaba的智能知识助手系统:从零到一的RAG实战开发
  • 语音增强论文汇总
  • YOLO13正式发布!考虑将yolov13的创新点融合到半监督中,构建YOLOv13_ssod
  • github上传大文件(多种解决方案)
  • 力扣 hot100 Day46
  • 分布式系统高可用性设计 - 监控与日志系统
  • LLM指纹底层技术——模型架构
  • 机器学习中Precision(查准率)和Recall(查全率)
  • smolagents - 如何在mac用agents做简单算术题
  • 端侧推理软件栈
  • AI时代基础入门
  • Web3:Solidity入门到精通
  • Wi-Fi 渗透测试 – 第一部分(网络基础)
  • Linux运维新手的修炼手扎之第20天
  • 近期学习总结
  • 求不重叠区间总和最大值
  • 16路串口光纤通信FPGA项目实现指南 - 第二部分(下)
  • 3.1 认识函数
  • ESP32——基于idf框架开发GPIO设备
  • OJ题目里面的复杂图形的输出类型的汇总展示(巧妙地利用对称性offset偏移量)
  • 【Linux】基本指令学习1
  • DL00294-2D图像空间中3D点云分割Delaunay三角剖分
  • spring-ai之工具调用(Tool Calling)
  • TCP 拥塞控制算法 —— 慢启动(Slow Start)笔记
  • 能行为监测算法:低成本下的高效管理
  • AlpineLinux的用户管理
  • 同态加密赋能大模型医疗文本分析:可验证延迟压缩的融合之道
  • MPPT电路设计
  • LVS集群调度器
  • 解决容器dns问题