您的位置:首页 > 其它

计数排序

2015-08-02 11:07 274 查看
计数排序假设n个输入元素中的每一个都是介于0到k之间的整数。其基本思想就是对每个输入元素x,确定小于x的元素个数。有了这一信息,就可以把x直接放到它在最终输出数组中的位置上。

#include<iostream>
void countsort(int *A,int *B,int n,int k)
{
//输入检查

int *C = new int[k];//记录小于输入x的个数
for (int i = 0; i < k;++i)
{
C[i] = 0;
}
for (int i = 0; i < n;++i)
{
C[A[i]] = C[A[i]] + 1;
}

for (int i = 1; i < k;++i)
{
C[i] = C[i - 1] + C[i];
}

for (int i = n - 1; i >= 0;--i)
{
B[C[A[i]]-1] = A[i];
--C[A[i]];
}
delete[] C;
}

int main()
{
int a[] = { 8, 4, 5, 6, 7 };
int *B = new int[5];
memset(B, 0, sizeof(int) * 5);
countsort(a, B, 5, 9);
for (int i = 0; i < 5;++i)
{
std::cout << B[i] << ' ';
}

delete B;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: