编程珠玑之第一章习题5:k趟算法给1000w数据排序的测试用例

来源:互联网 发布:网络舆情试题 编辑:程序博客网 时间:2024/06/05 01:29

习题5中为了能够实现在严格的1MB空间内给数据排序,可以使用k趟算法进行排序。每一趟一个区间,k趟我们可以给1000w整数划分k个区间,在这k个区间内分别进行排序,依照这个思路,我写了一个简单的测试用例,如下:

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
35
36
37
38
39
40
41
42
43
44
45
46
#include <stdio.h>
#include <stdlib.h>
#include <string.h>     /*memset*/

#define  MAxNUM 100     // 最大值
#define  COUNT  11      // 排序次数

typedef structunsigned int bit:1; } bitType;  // 占1位

int main(void)
{
    bitType arr[1 + MAxNUM/COUNT];
    memset(arr, 0sizeof(arr));    // 清零

    int base;
    if (MAxNUM%COUNT == 0)
        base = MAxNUM/COUNT;
    else
        base = MAxNUM/COUNT + 1;


    int a[10] = {2336708
                 87556613};

    for (int i = 1; i <= COUNT; i++)
    {
        for(int j=0; j < 10; j++)
        {
            if (a[j] >= base*(i-1) && a[j] < base*i)
            {
                arr[a[j]-base*(i-1)].bit = 1;
            }
        }
        
        for(int k=0; k < (MAxNUM/COUNT + 1); k++)
        {
            if (arr[k].bit == 1)
                printf("%d\t", k+base*(i-1));
        }

        memset(arr, 0sizeof(arr));    // 清零
    }

    
    return 0;
}
文本形式的读取文件,可以依照“ 编程珠玑之习题1.5:两趟算法完成100w数据排序 ”来完成,由于时间关系,我再不去动手实现!




原创粉丝点击