您的位置:首页 > 编程语言

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

2013-09-17 17:08 411 查看
习题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 struct{ unsigned int bit:1; } bitType; // 占1位

int main(void)

{

bitType arr[1 + MAxNUM/COUNT];

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

int base;

if (MAxNUM%COUNT == 0)

base = MAxNUM/COUNT;

else

base = MAxNUM/COUNT + 1;

int a[10] = {23, 3, 67, 0, 8,

87, 5, 56, 6, 13};

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, 0, sizeof(arr)); // 清零

}

return 0;

}
文本形式的读取文件,可以依照“
编程珠玑之习题1.5:两趟算法完成100w数据排序 ”来完成,由于时间关系,我再不去动手实现!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐