编程珠玑之第一章习题6给每个整数不超过10次的100w数据排序的测试用例

依照答案提示,我们可以使用4bit来统计每个整数出现的次数,我在这里利用位段写了一个测试用例:具体如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <stdio.h>
#include <stdlib.h>
#include <string.h>      /* memset*/

#define N    100
#define MAX  20

typedef  structunsigned  int count: 4; } stats;   // 占4位

int main( void)
{
    stats arr[N];
    memset(arr,  0sizeof(arr)); // 数组a清零
     int a[MAX] = { 034233116346233
                   64343244,   14560};

     int nValue;
     for ( int i= 0; i< MAX; i++)
    {
        nValue = a[i];
        arr[nValue].count++;
    }

     for ( int index= 0; index < N; index++)
    {
         if (arr[index].count !=  0)
        {
             for( int k= 0; k < arr[index].count; k++)
                printf( "%d\t", index);
        }
    }

     return  0;
}
输出结果:


对于文件读写的操作,可以依照" 编程珠玑之习题1.3:度量100w整数排序的运行时间 "的步骤来实现,由于时间关系,这里不再赘述!

如有错误!请不吝赐教!




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值