计数排序:不须要比較就能得出排序的顺序__比如。本章的计数排序、基数排序、桶排序

比較排序:须要进行比較才干得出排序的顺序__比如,本章的堆排序、高速排序(本质是插入排序)、插入排序

代码清单:计数排序__完美演绎下标的作用

public class Count_Sort {//接收须要排序的数组private int[] A;//排序后的数组private int[] B;//用于计数的数组private int[] C;// 初始化public Count_Sort(int[] A) {this.A = A;B = new int[A.length];C = new int[innitTemp()];}// 初始化暂时数组的大小public int innitTemp() {int bigest = A[0];for (int i = 1; i < A.length; i++) {if (A[i] > bigest) {bigest = A[i];}}return bigest+1;}// 计数排序public void sort() {// 把i中相应的元素映射到C中for (int i = 0; i < A.length; i++) {int value = A[i];C[value] = C[value] + 1;// 用C统计value有多少个}show(C);// 对C的值含义进行更换。换为有多少个小于当前下标的个数for (int i = 1; i < C.length; i++) {C[i] += C[i - 1];}show(C);// 最后得出来A[i]元素正确的插入位置for (int i = A.length - 1; i >= 0; i--) {int value = A[i];// 为什么要-1呢?想想,假设比5小的数是2个,那5就应该查到数组的2个位置,那么第2个位置,相应就是A[C[value]-1]B[C[value] - 1] = value;// 这个非常重要!比如,A[5]==A[2]这样的情况,A[5]插入了正确的位置,那么A[2]插入的顺序怎么算呢?就让它紧跟在A[5]后面!

C[value] -= 1; } show(B); } public void show(int[] X) { for (int i = 0; i < X.length; i++) { int j = X[i]; System.out.print(j + " "); } System.out.println(); System.out.println("--------------------------------------------------------------"); } public static void main(String[] args) { int []A={1,2,3,3,2,1,1,5,1,3,4,5}; Count_Sort sort=new Count_Sort(A); sort.sort(); } }

输出的结果:

0  4  2  3  1  2  
--------------------------------------------------------------
0  4  6  9  10  12  
--------------------------------------------------------------
1  1  1  1  2  2  3  3  3  4  5  5  
--------------------------------------------------------------

算法导论第八章__实现计数排序相关推荐

  1. 算法导论5:基数排序和计数排序 2016.1.5

    今天的这个比较神奇,是一个线性复杂度的排序算法O(n),算法导论在这一部分先证明了比较排序的复杂度下界是nlgn,所以基数排序不是基于比较的排序. 其实这种比较方法我们应该都接触过.假设输入的数都是三 ...

  2. 时间排序python_算法导论 第八章 线性时间排序(python)

    比较排序:各元素的次序依赖于它们之间的比较{插入排序O(n**2) 归并排序O(nlgn) 堆排序O(nlgn)快速排序O(n**2)平均O(nlgn)} 本章主要介绍几个线性时间排序:(运算排序非比 ...

  3. 算法导论第八章思考题

    8-1(比较排序的概率下界) 在这一问题中,我们将证明对于给定的n个互异的输入元素,任何确定或随机的比较排序算法,其概率运行时间都有下界Ω(nlgn).首先分析一个确定的比较排序算法A,其决策树为Ta ...

  4. 《算法导论》(一)--插入排序与合并排序

    插入排序 书上说的很好,用打牌作比方.就是一边是排好序的,剩下的是待排序的,每次取一个待排序的元素,找到按序的位置,插入已排好序的部分中.元素取完也就结束了.复杂度O(n^2). 代码: 1 #inc ...

  5. 算法导论 3-3 根据渐近增长率排序

    (根据渐近增长率排序) a. 根据增长的阶来排序下面的函数,即求出满足,,-的函数的一种排列,,-的函数的一种排列,,-.把你的表划分成等价类,使得函数和在相同类中当且仅当. ,,,,,,,,,,,, ...

  6. 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现

    计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数.此处k为某个整数(输入数据在一个小范围内). 算法思想 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数.然后再将 ...

  7. 算法——计数排序与快速排序

    计数排序是一种算法复杂度 O(n) 的排序方法,适合于小范围集合的排序.比如100万学生参加高考,我们想对这100万学生的数学成绩(假设分数为0到100)做个排序.我们如何设计一个 最高效的排序算法. ...

  8. 使其正序排序 打印一串数字_JavaScript计数排序算法

    一.计数排序算法 计数排序(Counting sort)是一种稳定的线性时间排序算法.该算法于1954年由 Harold H. Seward 提出.计数排序使用一个额外的数组,数组的下标对应待排序的数 ...

  9. 算法学习总结(八):计数排序

    一.算法简介 计数排序(Counting sort)是一个非基于比较的稳定的排序算法.计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数.然后根据数组C来将A中的元素排到 ...

最新文章

  1. linux date时间戳互相转换
  2. POJ 1195 Mobile phones【 二维树状数组 】
  3. 复习.net/c#时的小文章之万年草稿版 (全是基础概念,请懂的人绕行)
  4. python读书笔记2000_流畅的Python读书笔记
  5. awk按分隔符的不同取出不同的列
  6. 开源数据库在平安的应用实践
  7. vue 查看变量类型_前端开发问题集:Vue开发中数据更新了,为何视图没有发生变化呢...
  8. LINUX Cacti 安装SOP FOR CentOS6.5
  9. 沪漂6年,我终于在上海买了第一套房
  10. 需求分析报告模板(免费)
  11. 流程和企业成熟度模型(PEMM)
  12. 无线通信设备安装工程概预算编制_祁东设备安装工程施工承包-设计安装_天霖工程...
  13. PHP站长工具箱网站源码下载,在线小工具网站源码,独立后台管理,可自主添加工具
  14. php自我介绍50字,简短自我介绍50字
  15. Android各种时间格式转换
  16. VMTK【1】Getting Started
  17. 常用商务邮箱:常用商务邮箱注册
  18. 手机有显示3g无法理解服务器,3G手机根本不需升级4G,一个技巧提高3倍网速!...
  19. Pico XR Unity开发时如何设置应用版权保护
  20. SVG之Animation

热门文章

  1. 服务器搭建对讲机系统,世邦对讲配置步骤以及方法(支持跨服务器对讲).doc
  2. mysql+last_query_cost_辛星简译MySQL中的last_query_cost_MySQL
  3. 江苏机器人竞赛南航_挑战不止 热血不息!1000余名青少年决战江苏省机器人普及大赛!...
  4. m3u8解析_Python多进程教你下载M3U8加密或非加密视频!
  5. integer为null_比较两个Integer,为什么必须使用equals?不用==
  6. Playwright 可靠的端到端测试
  7. CommonJS模块的循环加载
  8. 1220.统计元音字母序列的数目-LeetCode
  9. web 前端绘制折线_html5绘制折线图
  10. python123九宫格输入_使用python PIL库实现简单验证码的去噪方法步骤