计数排序笔记

Posted 小闲笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计数排序笔记相关的知识,希望对你有一定的参考价值。

排序算法有很多种,接下来介绍三种非比较排序,今天记录计数排序的学习过程,

先看定义:

计数排序假设n个输入元素中的每一个都是介于0到k之间的整数(k为某个整数),其基本思想是:对于每一个输入元素x,确定出小于x的元素个数。有了这一信息,就可以吧x直接放到它在最终输出数组中的位置上,例如,如果有17个元素小于x,则x就属于第18个输出位置


第一步:扫描待排序的数组arr[n],使用计数数组count[max-min],对arr[n]中的出现的元素计数。

第二步:扫描计数数组count[],还原arr[],排序结束


例如有待排序的数组

arr={1,7,5,5,7,2,9,4,4,2,6,2};

第一步扫描 并计数

count结果如下


count 0 1 2 3 ....... 7 8 9
次数 0 1 3 0
2 0 1



第二步还原arr[]数组

arr={1,2,2,2,4,4,5,5,6,7,7,9}


下面是从网上找来的图辅助理解



下面是一个简单实现:

int[] arr={1,7,5,5,7,2,9,4,4,2,6,2};
int[] count=new int[10]; //初始化一个数组
for(int i=0;i<ints.length;i++){
count[ints[i]]+=1;//对原数据元素出现的次数 计数
}
int index=0;
for(int i=0;i<count.length;i++){
while (count[i]-->0){
ints[index++]=i; //按每个出现的次数,将数组还原
   }
}
for(int i:ints){
System.out.print(i+"   ");
}

输出结果:


以上是关于计数排序笔记的主要内容,如果未能解决你的问题,请参考以下文章

算法学习笔记:JavaScript实现计数排序

内存管理笔记

Realm和RecyclerView项目排序和自动ViewPager片段通信

(学习笔记)排序算法

(学习笔记)排序算法

算法导论笔记——第八章 线性时间排序