排序 计数排序“概念”
Posted thefist11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了排序 计数排序“概念”相关的知识,希望对你有一定的参考价值。
1. 应用场景
一是需要排序的元素必须是整数,二是排序元素的取值要在一定范围内,并且比较集中。
1.1 思想
step1. 统计数组中每个值为 X 的元素出现的次数,存入数组 C 的第X 项
step2. 累加元素出现次数(计算不超过 X包括X 的元素的个数)
step3. 反向填充目标数组:将元素X依次逐个放入到适当的位置
void countSort(int arr[], int len)
//1.获得数列的最大值
int max = arr[0];
for (int i = 1; i < len; i++)
if (arr[i] > max)
max = arr[i];
//2.根据数列的最大值肯定统计数组的长度
int* countArray = new int[max + 1];
//3.遍历数列,填充统计数组
for (int i = 0; i < len; i++)
countArray[arr[i]]++;
//4.遍历统计数组,输出结果
int index = 0;
for (int i = 0; i < max + 1; i++)
while (countArray[i] > 0)
arr[index++] = i;
countArray[i]--;
1.2 min优化
空间不一定需要max那么多个。计算max-min个即可。
void countSort(int arr[], int len)
//1.获得数列的最大值和最小值
int max = arr[0];
for (int i = 1; i < len; i++)
if (arr[i] > max)
max = arr[i];
int min = arr[0];
for (int i = 1; i < len; i++)
if (arr[i] < min)
min = arr[i];
//2.初始化计数数组count的长度
int* countArray = new int[max - min + 1];
//3.遍历数列,填充统计数组
for (int i = 0; i < len; i++)
countArray[arr[i] - min]++;// A中的元素要减去最小值,再作为新索引
//4.遍历统计数组,输出结果
int index = 0;
for (int i = 0; i < max + 1; i++)
while (countArray[i] > 0)
arr[index++] = i + min;
countArray[i]--;
【引用】
[1] 代码countSort.h
以上是关于排序 计数排序“概念”的主要内容,如果未能解决你的问题,请参考以下文章