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

上海网站设计推荐刻科技网站首页

上海网站设计推荐刻,科技网站首页,wordpress做api接口,大连在哪个省市以下是计数排序的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格: 一、计数排序基础实现 原理 通过统计每个元素的出现次数,按顺序累加得到每个元素的最终位置,并填充到结果数组中。 代码示…

以下是计数排序的详细解析,包含基础实现、常见变体的完整代码示例,以及各变体的对比表格:
在这里插入图片描述


一、计数排序基础实现

原理

通过统计每个元素的出现次数,按顺序累加得到每个元素的最终位置,并填充到结果数组中。

代码示例
public class CountingSort {void sort(int[] arr) {if (arr.length == 0) return;// 找到数据范围int min = Arrays.stream(arr).min().getAsInt();int max = Arrays.stream(arr).max().getAsInt();int range = max - min + 1;// 统计每个元素出现的次数int[] count = new int[range];for (int num : arr) {count[num - min]++;}// 累加统计结果,得到每个元素的最终位置for (int i = 1; i < count.length; i++) {count[i] += count[i - 1];}// 反向填充结果数组以保持稳定性int[] output = new int[arr.length];for (int i = arr.length - 1; i >= 0; i--) {int num = arr[i];output[count[num - min] - 1] = num;count[num - min]--;}// 将结果复制回原数组System.arraycopy(output, 0, arr, 0, arr.length);}
}
复杂度分析
  • 时间复杂度O(n + k)n为元素数量,k为值域范围)。
  • 空间复杂度O(k)
  • 稳定性:稳定(相同值的元素相对顺序不变)。

二、常见变体及代码示例

1. 支持负数的计数排序

改进点:通过偏移量处理负数,扩展适用范围。
适用场景:数据包含负值。

public class CountingSortWithNegatives {void sort(int[] arr) {if (arr.length == 0) return;int min = Arrays.stream(arr).min().getAsInt();int max = Arrays.stream(arr).max().getAsInt();int range = max - min + 1;int[] count = new int[range];for (int num : arr) {count[num - min]++; // 偏移量为min}for (int i = 1; i < count.length; i++) {count[i] += count[i - 1];}int[] output = new int[arr.length];for (int i = arr.length - 1; i >= 0; i--) {int num = arr[i];output[count[num - min] - 1] = num;count[num - min]--;}System.arraycopy(output, 0, arr, 0, arr.length);}
}
2. 原地计数排序

改进点:尝试在原数组上操作,减少额外空间。
适用场景:内存受限场景(但可能牺牲时间效率)。

public class InPlaceCountingSort {void sort(int[] arr) {if (arr.length == 0) return;int min = Arrays.stream(arr).min().getAsInt();int max = Arrays.stream(arr).max().getAsInt();int range = max - min + 1;int[] count = new int[range];for (int num : arr) {count[num - min]++;}// 直接在原数组上填充int index = 0;for (int i = 0; i < count.length; i++) {while (count[i] > 0) {arr[index++] = i + min;count[i]--;}}}
}
3. 并行计数排序

改进点:利用多线程加速计数统计。
适用场景:超大数据集或并行计算环境。

import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.RecursiveAction;public class ParallelCountingSort {void sort(int[] arr) {if (arr.length == 0) return;int min = Arrays.stream(arr).min().getAsInt();int max = Arrays.stream(arr).max().getAsInt();int range = max - min + 1;int[] count = new int[range];// 并行统计ForkJoinPool pool = new ForkJoinPool();pool.invoke(new CountTask(arr, count, 0, arr.length - 1, min));// 累加统计结果for (int i = 1; i < count.length; i++) {count[i] += count[i - 1];}int[] output = new int[arr.length];for (int i = arr.length - 1; i >= 0; i--) {int num = arr[i];output[count[num - min] - 1] = num;count[num - min]--;}System.arraycopy(output, 0, arr, 0, arr.length);}// 并行统计任务private static class CountTask extends RecursiveAction {private final int[] arr;private final int[] count;private final int start;private final int end;private final int min;CountTask(int[] arr, int[] count, int start, int end, int min) {this.arr = arr;this.count = count;this.start = start;this.end = end;this.min = min;}@Overrideprotected void compute() {if (end - start < 1000) { // 小区间直接统计for (int i = start; i <= end; i++) {count[arr[i] - min]++;}} else {int mid = (start + end) / 2;invokeAll(new CountTask(arr, count, start, mid, min),new CountTask(arr, count, mid + 1, end, min));}}}
}

三、变体对比表格

变体名称时间复杂度空间复杂度稳定性主要特点适用场景
基础计数排序O(n + k)O(k)稳定简单易实现,适用于小范围数据值域较小且无负数的场景
支持负数的计数排序O(n + k)O(k)稳定扩展支持负数,需计算最小值数据包含负值的场景
原地计数排序O(n + k)O(k)稳定减少输出数组的使用,直接修改原数组内存受限但时间允许的场景
并行计数排序O(n/k + k)(并行)O(k)稳定利用多线程加速统计步骤超大数据集或高性能计算环境

四、关键选择原则

  1. 基础场景:优先使用基础计数排序,因其简单且适用于小范围数据。
  2. 负数支持:当数据包含负值时,需使用支持负数的变体。
  3. 内存限制:原地排序适合内存紧张但允许额外统计数组的场景。
  4. 性能优化:并行计数排序适用于超大数据集或并行计算环境。
  5. 稳定性需求:所有变体均稳定,适用于需保持元素相对顺序的场景(如排序带键值的记录)。

通过选择合适的变体,可在特定场景下优化性能或扩展适用性。例如,并行计数排序在大数据集上显著提升速度,而支持负数的变体扩展了算法的通用性。


文章转载自:

http://5K0IQvkD.mLycx.cn
http://pOecujkE.mLycx.cn
http://y9eY0sRI.mLycx.cn
http://iO2mMOoV.mLycx.cn
http://0oJXMLI6.mLycx.cn
http://1ouzlldk.mLycx.cn
http://HlaIwXcX.mLycx.cn
http://cvxwhKtO.mLycx.cn
http://pRhB3Kae.mLycx.cn
http://Yhm8z336.mLycx.cn
http://sULOcrWS.mLycx.cn
http://gqpzaOfv.mLycx.cn
http://Xr8lby2r.mLycx.cn
http://4ZqptKld.mLycx.cn
http://KvwuFpGr.mLycx.cn
http://EWxxidFM.mLycx.cn
http://PhVi6vsO.mLycx.cn
http://8NxL1Rhr.mLycx.cn
http://yJ0Dm2rT.mLycx.cn
http://m5CtM8n8.mLycx.cn
http://PE7WqyNF.mLycx.cn
http://3G77DAlz.mLycx.cn
http://ORTgXU2y.mLycx.cn
http://ihcALWKO.mLycx.cn
http://SDEfoj8j.mLycx.cn
http://qCZd2LT1.mLycx.cn
http://0AZWQpW9.mLycx.cn
http://roHs0mTG.mLycx.cn
http://FyQxdD5B.mLycx.cn
http://odiz6VlO.mLycx.cn
http://www.dtcms.com/wzjs/664118.html

相关文章:

  • 餐饮业建设网站意义网络营销是什么的一种市场营销方式
  • 国外做健康的网站一个公司的官网怎么做
  • 杭州网站改版公司电话忻州新闻最新消息今天
  • 网站加速cdn自己做电子商务网站建设实训报告
  • 国内简洁网站设计公司变更地址需要多少钱
  • 怎么自己注册网站平台了网站开发 360浏览器
  • 成都建设公司网站万州电商网站建设
  • 营销网站建设情况调查问卷凡客诚品v十商城
  • 建设学校网站需要具备免费cad图纸下载网
  • 在线免费货源网站邢台163信息网
  • 网站和搜索引擎建站公司还行吗
  • 重庆产品网站推广网站建设电商考试
  • 南海网站建设公司福州自助建站软件
  • 电商网站建设电话学生网页制作
  • 广州制作外贸网站公司简介东莞足球场建设工程公司
  • aspcms 生成网站地图抖音seo优化软件
  • seo研究中心好客站怎么自己制作月饼
  • 贵阳网站制作专业网页设计页面代码
  • 如何在手机上做自己的网站网页是干什么的
  • 网站建设czzmcn网上服装定制平台
  • 58同城佛山网站建设网站建设管理自查报告
  • 漳州电脑网站建设目前做外贸的网站哪个比较好
  • 尼尔的h版是那个网站做的网站建设咨询费用
  • wordpress电影资源网站免费网站空间怎么办
  • 手机网站首页布局设计国外短网址生成
  • 上海专业网站建设机构wordpress finag主题下载
  • 有做盆景的网站dw个人网站设计
  • 上海网站建设公司服务有哪些怎么做网站游戏
  • 立网站系网络服务器的作用
  • 郑州品牌网站建设费用手机制作表格