计数排序(第8章线性时间排序)

根据《算法导论》第八章算法实现下面函数,详见《算法导论》第八章计数排序,程序可运行:

#include <STDLIB.H>

#include <STDIO.H>
#include <MALLOC.H>
#include <STRING.H>
/********************************************************
  *  函数名: void COUNTING_SORT(int A[],int length,int k)
  *  函数功能:计数排序.
  *  输入参数:int A[]为需要排序的数组,int length数组的长度,int k数组里的数范围为0到k之间.
  *  输出参数:void
  *  附加说明:.
  *  作者:YL
  *  当前版本: v_1
  *  完成日期: 2014-04-23 
/********************************************************/
void COUNTING_SORT(int A[],int length,int k)
{
int *C,*B;
int i,j;
C=(int *)malloc(sizeof(int)*(k+1));

//for(i=0;i<=k;i++)
// C[i]=0;
memset(C,0,sizeof(int)*(k+1));
    /*假设输入的数均是0到k之间的数,则C[i]中放置的是A中值为i的数的个数.*/
for(j=0;j<length;j++)
C[A[j]]=C[A[j]]+1;
    /*C[i]中现在放置的是比i小或等于i的元素的个数*/
for(i=1;i<=k;i++)
C[i]=C[i]+C[i-1];
   
B=(int *)malloc(sizeof(int)*length);

for (j=0;j<length;j++)
{
B[C[A[j]]-1]=A[j];
C[A[j]]=C[A[j]]-1;
}


for(i=0;i<length;i++)
A[i]=B[i];


free(C);
free(B);
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值