前提:每个整数互异
解决:位图排序
代码:
#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)的元素交换