计数排序

计数排序的思想,是对于每一个输入,确定出小于该输入的元素的个数。


/**---------------------------------
            houyong
------------------------------------*/
#include <iostream>
#include <ctime>
#include <stdlib.h>
using namespace std;

/**
 *  计数排序的思想,是对于每一个输入的A[i],确定出小于A[i]的元素个数。
 *  它有一个假定条件,那就是数组中的数是介于0到k之间的整数
 *  A[]为待排序数组
 *  n为数组A[]的大小
 *  B[]为排序后的结果
 *  程序中还会用到一个辅助数组C[],大小为k
 *
 */
void Counting_Sort(int A[], int B[], int n)
{
    int *C = new int[100];          //这里假定A[]中数字全部介于0-100
    for(int i=0; i<100; i++)
        C[i] = 0;
    for(int i=0; i<n; i++)
        C[A[i]] = C[A[i]] + 1;
    for(int i=1; i<100; i++)
        C[i] = C[i] + C[i-1];
    for(int i=n-1; i>=0; i--)
    {
        B[C[A[i]]-1] = A[i];
        C[A[i]] = C[A[i]] - 1;
    }
    delete[] C;
}

int main()
{
    int A[10];                      //待排序数组
    int B[10];                      //存放结果
    srand(time(0));
    for(int i=0; i<10; i++)         //随机产生0-100的10个数
        A[i] = 0 + rand()%(100 - 0);
    for(int i=0; i<10; i++)         //打印排序前的数组A[]
        cout<<A[i]<<" ";
        cout<<endl;
    Counting_Sort(A, B, 10);        //k=100
    for(int i=0; i<10; i++)         //打印排序后的数组B[]
        cout<<B[i]<<" ";
        cout<<endl;
    return 0;
}

/**
4 79 25 81 98 51 38 67 33 48
4 25 33 38 48 51 67 79 81 98
*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值