利用位图数据结构(位图法)排序不重复数字(C语言)


1、针对不重复的稠密集合,如不重复的整数

上代码
例程1:生成不重复的整数,并保存在in.txt文件中

#include
#include

int main()
{
	int i = 1000000, j = 8999999;
	FILE *fp;
	fp = fopen( "in.txt", "r+" );
	while(1)
	{
		i += j;
		j = -j;
		if( j > 0 )
			j--;
		else
			j++;
		if( i % 7 != 0 )
			fprintf( fp, "%d\n", i );	
		if( i == 5500000 )
			break;
	}
}

例程2:排序程序

#include
#include

void setBit( char *ptr, int N, int v )
{
	ptr += N / 8;
	N = N % 8;
	if( v == 0 )
		*ptr = *ptr & ~( 1 << ( 7 - N ) );
	else
		*ptr = *ptr | ( 1 << ( 7 - N ) );
}

int getBit( char *ptr, int N )
{
	ptr += N / 8;
	N = N % 8;
	if( *ptr & ( 1 << ( 7 - N ) ) )
		return 1;
	else
		return 0;
}

int main()
{
	char *ptr;
	int i, j;
	FILE *fp, *fpin;
	ptr = malloc( 1250000 );
	for( i = 0; i < 10000000; i++ )
		setBit( ptr, i, 0 );
	fpin = fopen( "in.txt", "r" );
	while( fscanf( fpin, "%d", &j ) != EOF )
		setBit( ptr, j, 1 );
	fp = fopen( "out.txt", "a+" );
	for( i = 0; i < 10000000; i++ )
		if( getBit( ptr, i ) )
			fprintf( fp, "%d\n", i );
}

测试时间:编译时间约3s,执行时间约7s


《“利用位图数据结构(位图法)排序不重复数字(C语言)”》 有 1 条评论

回复 single 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注