计数排序的原理:
(1)首先,找出最大的元素,给“count[ ]”申请“最大元素的下标+1”个单元(因为数组下标是从0开始的,所以要+1);
(2)然后,统计每个元素出现的次数,把次数存到“count[ ]”里;
(3)最后,通过一个元素出现的次数-1,从而算出正确顺序的位置,再把元素放进去,就有顺序了。
因为不知道范围的大小,所以需要申请内存,如果知道范围的大小,就可以直接声明。
#include <iostream>
#include <stdlib.h>
using namespace std;
/**********************************************/
/* 计数排序
/*********************************************/
void CountingSort(int array[], int n)
{
int i;
int largest = array[0]; //设最初最大元素默认是array[0]
int *temp = new int[n]; //申请一个n个int元素的数组内存
for (i = 1; i < n; i++)
{
if (largest < array[i]) //找出最大元素
{
largest = array[i];
}
}
int *count = new int[largest + 1]; //申请一个[largest+1]个int元素的数组内存
for (i = 0; i <= largest; i++)
{
count[i] = 0; //初始化
}
f