排序算法之计数排序
计数排序的效率是所有排序算法中最高的
待排序的元素必须是整数
待排序元素的取值要在一定的范围内 并且比较集中
c++实现计数排序
计数排序gif
仔细看gif后程序难度比较简单,过程写在了程序中
程序代码:
#include <iostream>
using namespace std;
void jishu(int* arr, int len)
{
//先求最大最小值
int max, min;
max = min = arr[0];
for (int i = 0; i < len; i++)
{
if (max < arr[i]) max = arr[i];
if (min > arr[i]) min = arr[i];
}
//通过最大最小值 我们动态分配一个数组 用来计数(数组每个元素共有几次)
int* p = new int[max - min + 1];
memset(p, 0, sizeof(int) * (max - min + 1));
//开始计数
for (int i = 0; i < len; i++)
{
p[arr[i] - min]++;
}
//把p中记录的按顺序复原回原数组
int n = 0;
for (int i = 0;i<max-min+1; i++)
{
for (int j = 0; j < p[i] ; j++)
{arr[n++] = min+i;}
}
}
int main(int argc, char* argv[])
{
int arr[] = { 2,3,8,7,1,2,2,2,7,3,9,8,2,1,4,2,4,6,9,2 }; // 待排序的数组。
int len = sizeof(arr) / sizeof(int); // 求数组长度。
jishu(arr, len);
for (int i = 0; i < len; i++)
{
cout << arr[i] << " ";
}
}