前提:每个整数互异
解决:位图排序
代码:
#include <stdio.h>
#define BITSPERWORD 32
#define SHIFT 5
#define MASK 0x1F
#define N 10000000
int a[1 + N/32];
void set(int i) { a[i>>SHIFT] |= (1<<(i & MASK)); }
void clr(int i) { a[i>>SHIFT] &= ~(1<<(i & MASK)); }
int test(int i){ return a[i>>SHIFT] & (1<<(i & MASK)); }
int main()
{ int i;
for (i = 0; i < N; i++)
clr(i);
while (scanf("%d", &i) != EOF)
set(i);
for (i = 0; i < N; i++)
if (test(i))
printf("%d\n", i);
return 0;
}生成位于0~N-1之间K个不同的随机顺序的随机整数:1、0~N-1顺序初始化a[N]数组
2、产生i~N-1的随机数作为下标,让这个下标的数组值与下标i(i为第n个产生的随机数减1,n为1~K)的元素交换
本文介绍了一种利用位图进行排序的算法,并提供了完整的C语言实现代码。该算法适用于整数互异的情况,通过位操作实现高效排序。此外,还讨论了如何生成特定范围内的随机整数序列。

被折叠的 条评论
为什么被折叠?



