位向量实现文件中数据排序
来源:互联网 发布:win7添加usb打印机端口 编辑:程序博客网 时间:2024/06/06 21:01
/*功能:利用位向量,排序文件中的整数*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/*生成a至b之间的随机数*/
static int rand_int(int a,int b)
{
return rand()%(b-a+1)+a;
}
/*交换a,b两数的值*/
static void swap(int *a,int *b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}
/*向文件中写入0-(n-1)之间的随机数*/
static void rand_write_file(FILE *f,int n)
{
/*借助一个辅助数组*/
int *arr=(int *)malloc(sizeof(int)*n);
int i;
for(i=0;i<n;i++){
arr[i]=i;
}
for(i=0;i<n;i++){
int index=rand_int(i,n-1);
fprintf(f,"%d\n",arr[index]);
swap(&arr[i],&arr[index]);/*关键步骤*/
}
free(arr);
}
/*将位向量中的第index位置1*/
static void set_bit(int *bits,int index)
{
bits[index>>5] |= 1 << (index & 0x1F);
}
/*测试index位是否为1*/
static int test_bit(int *bits,int index)
{
return bits[index>>5] & (1 << (index & 0x1F));
}
/*利用位向量,排序随机文件,并有序输出到另一个文件*/
static void sort_file(FILE *in_file,FILE *out_file,int n)
{
int count=(n>>5)+1;
int *bits=(int *)malloc(sizeof(int)*count);
int i;
for(i=0;i<count;i++)
bits[i]=0;
int index;
while(fscanf(in_file,"%d",&index)!=EOF){
set_bit(bits,index);
}
for(i=0;i<n;i++){
if(test_bit(bits,i))
fprintf(out_file,"%d\n",i);
}
free(bits);
}
int main(int argc,char *argv[])
{
FILE *in_file,*out_file;
in_file=fopen("in_file.txt","w+");
out_file=fopen("out_file.txt","w");
rand_write_file(in_file,10000000);
fseek(in_file,0,SEEK_SET);
clock_t start,end;
start=clock();
sort_file(in_file,out_file,10000000);
end=clock();
printf("The total times: %ds",(end-start)/CLOCKS_PER_SEC);
fclose(in_file);
fclose(out_file);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
/*生成a至b之间的随机数*/
static int rand_int(int a,int b)
{
return rand()%(b-a+1)+a;
}
/*交换a,b两数的值*/
static void swap(int *a,int *b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}
/*向文件中写入0-(n-1)之间的随机数*/
static void rand_write_file(FILE *f,int n)
{
/*借助一个辅助数组*/
int *arr=(int *)malloc(sizeof(int)*n);
int i;
for(i=0;i<n;i++){
arr[i]=i;
}
for(i=0;i<n;i++){
int index=rand_int(i,n-1);
fprintf(f,"%d\n",arr[index]);
swap(&arr[i],&arr[index]);/*关键步骤*/
}
free(arr);
}
/*将位向量中的第index位置1*/
static void set_bit(int *bits,int index)
{
bits[index>>5] |= 1 << (index & 0x1F);
}
/*测试index位是否为1*/
static int test_bit(int *bits,int index)
{
return bits[index>>5] & (1 << (index & 0x1F));
}
/*利用位向量,排序随机文件,并有序输出到另一个文件*/
static void sort_file(FILE *in_file,FILE *out_file,int n)
{
int count=(n>>5)+1;
int *bits=(int *)malloc(sizeof(int)*count);
int i;
for(i=0;i<count;i++)
bits[i]=0;
int index;
while(fscanf(in_file,"%d",&index)!=EOF){
set_bit(bits,index);
}
for(i=0;i<n;i++){
if(test_bit(bits,i))
fprintf(out_file,"%d\n",i);
}
free(bits);
}
int main(int argc,char *argv[])
{
FILE *in_file,*out_file;
in_file=fopen("in_file.txt","w+");
out_file=fopen("out_file.txt","w");
rand_write_file(in_file,10000000);
fseek(in_file,0,SEEK_SET);
clock_t start,end;
start=clock();
sort_file(in_file,out_file,10000000);
end=clock();
printf("The total times: %ds",(end-start)/CLOCKS_PER_SEC);
fclose(in_file);
fclose(out_file);
return 0;
}
- 位向量实现文件中数据排序
- 使用位逻辑运算实现位向量,并实现大数据排序
- 使用位逻辑运算实现位向量并实现位图排序
- 利用位向量实现海量数据存储
- 位向量和排序
- 位向量和排序
- 位向量和排序
- 位向量排序
- 位向量法排序
- 用位向量实现集合----适合小整数的排序
- 位向量的实现
- 逻辑运算实现位向量
- 实现位向量 1.6.2
- 使用位逻辑运算来实现位向量
- 使用位逻辑运算实现位向量
- 使用位逻辑运算来实现位向量
- 使用位逻辑运算实现位向量
- 使用位逻辑运算来实现位向量
- MINA服务端与C++客户端通讯(2)
- LINUX文件的特殊权限
- C# 获取当前月份的天数的三种方法
- C++之引用
- 关于MSCOMM控件的一些说明 作者[huxiangming]©[mgwmj]©
- 位向量实现文件中数据排序
- UVA 11345 Rectangles
- redhat5.5 安装gcc编译器过程
- 数据库设计的优化方法
- SQL
- 水平滚动条和垂直滚动条设置
- 编译选项
- oracle的RAC技术的jndi数据源配置
- 我对session的理解