线性排序之计数排序
2015-04-12 16:07
148 查看
主流排序是通过比较来确定顺序.而线性排序则是通过运算来确定顺序.
计数排序的基本思想:对每一个输入的元素X,确定小于X的元素的个数,从而知道X在数组中的位置
第一个for循环之后:
第二个for循环之后:
我们就知道在每个元素在数组中应该排的位置
最后过程如图:
排序完成,
计数排序的基本思想:对每一个输入的元素X,确定小于X的元素的个数,从而知道X在数组中的位置
void CouSort(int src[],int des[],int size,int max) { int i; int temp[100] = {0}; for (i = 1; i <= size; i++) { temp[src[i]]++; } for (i = 1; i <= max; i++) { temp[i] += temp[i-1]; } for (i = 1; i <= size; i++) { des[temp[src[i]]] = src[i]; temp[src[i]]--; } }输入数据:
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
temp | 0 | 2 | 1 | 0 | 0 | 0 | 1 | 3 | 3 | 0 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
temp | 0 | 2 | 3 | 3 | 3 | 3 | 4 | 7 | 10 | 10 |
最后过程如图:
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 2 | 3 | 3 | 3 | 4 | 6 | 10 | 10 |
des | 8 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 2 | 3 | 3 | 3 | 4 | 5 | 10 | 10 |
des | 8 | 8 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 1 | 3 | 3 | 3 | 4 | 5 | 10 | 10 |
des | 2 | 8 | 8 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 0 | 3 | 3 | 3 | 4 | 5 | 10 | 10 |
des | 2 | 2 | 8 | 8 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 0 | 3 | 3 | 3 | 4 | 5 | 9 | 10 |
des | 2 | 2 | 8 | 8 | 9 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 0 | 3 | 3 | 3 | 4 | 5 | 8 | 10 |
des | 2 | 2 | 8 | 8 | 9 | 9 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 0 | 2 | 3 | 3 | 4 | 5 | 8 | 10 |
des | 2 | 2 | 3 | 8 | 8 | 9 | 9 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 0 | 2 | 3 | 3 | 4 | 5 | 7 | 10 |
des | 2 | 2 | 3 | 8 | 8 | 9 | 9 | 9 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 0 | 2 | 3 | 3 | 4 | 4 | 7 | 10 |
des | 2 | 2 | 3 | 8 | 8 | 8 | 9 | 9 | 9 |
下标 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
src | 8 | 8 | 2 | 2 | 9 | 9 | 3 | 9 | 8 | 7 |
temp | 0 | 0 | 0 | 2 | 3 | 3 | 3 | 4 | 7 | 10 |
des | 2 | 2 | 3 | 7 | 8 | 8 | 8 | 9 | 9 | 9 |
相关文章推荐
- 算法导论:第8章 线性时间排序__计数排序
- 【算法导论-学习笔记】以线性时间增长的排序——计数排序
- 【算法导论】线性时间排序-计数排序、基数排序及桶排序
- 三大线性排序之计数排序
- 各种线性排序记录(计数排序,基数排序,桶排序) 及 希尔排序
- 线性时间排序:计数排序、计数排序、桶排序
- 【算法学习】线性时间排序-计数排序、基数排序和桶排序详解与编程实现
- 基数排序--基于计数排序的线性时间复杂度的排序算法
- 排序及选择算法的java实现(三)计数排序、计数选择、随机选择、最差线性时间选择
- 线性时间排序之计数排序,基数排序和桶排序
- 线性排序 — 计数排序
- 线性时间排序——计数排序,基数排序,桶排序
- (1.3.6)线性排序:计数排序
- 线性排序:计数排序与基数排序
- Java 三种线性排序之计数排序
- 线性时间排序之计数排序(JAVA)
- 第八章 线性时间排序 8.2 计数排序
- 排序算法之线性排序(计数排序和桶排序)--Java语言
- 线性时间排序之计数排序(算法导论8.2)
- 计数排序(线性复杂度的排序,且不需要进行大小比较)