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

2025年--Lc209- 75. 颜色分类(排序)--Java版

1.题目

在这里插入图片描述

2.思路

(1)快速排序:快速排序(Quick Sort)是一种高效的排序算法,基于分治法(Divide and Conquer)的思想。它的核心是通过选择一个基准元素(pivot),将列表分为两部分:一部分小于基准元素,另一部分大于基准元素,然后递归地对这两部分进行排序。快速排序的平均时间复杂度为 O(n log n)。
. 算法步骤
1)选择基准元素:从列表中选择一个元素作为基准(pivot)。选择方式可以是第一个元素、最后一个元素、中间元素或随机元素。

2)分区:将列表重新排列,**使得所有小于基准元素的元素都在基准的左侧,所有大于基准元素的元素都在基准的右侧。**基准元素的位置在分区完成后确定。

3)递归排序:对基准元素左侧和右侧的子列表分别递归地进行快速排序。

4)合并:由于分区操作是原地进行的,递归结束后整个列表已经有序。
(2)冒泡排序
在这里插入图片描述
每次都把次小的元素确定

3.代码实现

方法一(快速排序):

class Solution {
public void sortColors(int[] nums) {quickSort(nums, 0, nums.length - 1);}private static void quickSort(int[] a, int l, int r) {if (l >= r) return;int p = partition(a, l, r);quickSort(a, l, p - 1);quickSort(a, p + 1, r);}private static int partition(int[] a, int l, int r) {int pivot = a[r];int i = l; // a[l..i-1] < pivotfor (int j = l; j < r; j++) {if (a[j] < pivot) {swap(a, i, j);i++;}}swap(a, i, r); // 把 pivot 放到中间return i;}private static void swap(int[] a, int i, int j) {int t = a[i]; a[i] = a[j]; a[j] = t;}
}

补充:快速排序常见写法

public class QuickSort implements IArraySort {@Overridepublic int[] sort(int[] sourceArray) throws Exception {// 对 arr 进行拷贝,不改变参数内容int[] arr = Arrays.copyOf(sourceArray, sourceArray.length);return quickSort(arr, 0, arr.length - 1);}private int[] quickSort(int[] arr, int left, int right) {if (left < right) {int partitionIndex = partition(arr, left, right);quickSort(arr, left, partitionIndex - 1);quickSort(arr, partitionIndex + 1, right);}return arr;}private int partition(int[] arr, int left, int right) {// 设定基准值(pivot)int pivot = left;int index = pivot + 1;for (int i = index; i <= right; i++) {if (arr[i] < arr[pivot]) {swap(arr, i, index);index++;}}swap(arr, pivot, index - 1);return index - 1;}private void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}

方法二:冒泡排序

class Solution {public void sortColors(int[] nums) {int n=nums.length;for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(nums[i]>nums[j]){int temp=nums[i];nums[i]=nums[j];nums[j]=temp;}}}}}

方法三:计数

class Solution {
public void sortColors(int[] nums) {int cnt0=0;int cnt1=0;int cnt2=0;int n=nums.length;for(int i=0;i<n;i++){switch(nums[i]){case 0:cnt0++;break;case 1:cnt1++;break;case 2:cnt2++;break;}}for(int i=0;i<cnt0;i++){nums[i]=0;}for(int i=0;i<cnt1;i++){nums[i+cnt0]=1;}for(int i=0;i<cnt2;i++)nums[i+cnt0+cnt1]=2;
}
}
class Solution {
public void sortColors(int[] nums) {int cnt0=0;int cnt1=0;int cnt2=0;int n=nums.length;for(int i=0;i<n;i++){if(nums[i]==0){cnt0++;}else if(nums[i]==1){cnt1++;}else{cnt2++;}}for(int i=0;i<cnt0;i++){nums[i]=0;}for(int i=0;i<cnt1;i++){nums[i+cnt0]=1;}for(int i=0;i<cnt2;i++)nums[i+cnt0+cnt1]=2;
}
}
http://www.dtcms.com/a/520314.html

相关文章:

  • 郑州网站维护推广西安网站建设管理
  • 为 Claude Code CLI 提供美观且高度可定制的状态行,具有powerline support, themes, and more.
  • 第156期 适用于RAG的最佳开源嵌入模型 多语言自然语言处理及阿拉伯语文本的高性能开源嵌入模型
  • 公司网站建设需要哪些方面土地流转网站开发
  • Grafana监控可视化
  • GEO数据分析与效果归因:GEO 效果的多维度分析框架
  • 31.stream数据类型应用
  • 蓝牙协议6.1
  • 微服务中的服务熔断、降级与限流
  • 查网站的建站系统百度搜索网站图片
  • 网站界面风格设计描述网站类网站开发犯罪吗
  • 新站点seo联系方式设计工作室网站首页
  • Adobe Lightroom Classic 2025解锁版 (专业照片管理)
  • univla复现libero
  • kubernets的pod管理
  • 14、【Ubuntu】【VSCode】VSCode 断联问题分析:hostname(二)
  • Java 堆排序(Heap Sort)详解教程
  • 软件设计师知识点总结:操作系统
  • 黄岩路桥网站设计网站流量提升方案
  • 设计师网站欣赏店铺只做商品展示网站怎么做
  • dify部署及SSL自签实现
  • 云南省建设厅标准员网站手机兼职赚钱
  • Redis哈希表渐进式rehash深度解析:为何百万数据迁移不阻塞服务?
  • 广东省省考备考(第一百三十一天10.23)——科学推理:电学(第六节课)
  • Spring的三级缓存和SpringMVC的流程
  • 为什么麒麟信创系统需要开启overcommit_memory才能安装postgresql成功
  • PostGresql All语法
  • [java] 图文示八股
  • 【图像处理】图像形态学操作
  • 网站上传 空间 数据库开发一个电商平台app要多少钱