vc 6.0下实现位图排序

来源:互联网 发布:mac触碰板 编辑:程序博客网 时间:2024/05/21 05:20

  先把源程序贴出来:

版本一:

#include <iostream.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctime>
#include <windows.h>

int map[8]={1,2,4,8,16,32,64,128};

int Random()

 int result1,result2;
 //srand((unsigned)time(0));
 
 result1=rand();
 //cout<<setiosflags(ios::left)<<setw(15)<<result1;
 result2=rand();
 //cout<<setiosflags(ios::right)<<setw(15)<<result2;
 return ((result1<<16)+result2);
}

 

void InPut_Map(char *mapbase,int size)
{

 int data;
 int i;
 char *p;
 p=mapbase;
 
 

 for(i=0;i<size;i++)
 {
  //srand((unsigned)time(0));
  data=Random();
  //cin>>data;
  p+=data/8;
  (*p)=(*p)|(map[data%8]);
  p=mapbase;
  //Sleep(1000);
 }
}

void output(char * mapbase)
{
 
 int i,j;
 int count=0;
 char *p=mapbase;

 cout<<"After sorted,the number is:"<<endl;
 for(i=0;i<0x1fffffff;i++)
 { 
  p=mapbase+i;
  for(j=0;j<8;j++)
   if(((*p)&(map[j]))!=0)
   { 
    if(count%5==0)
     cout<<endl;
    cout<<setiosflags(ios::left)<<setw(15)<<(8*i+j);
    count++;
   }
 }
}

void main()

 int size;
 char *mapbase;
 
 cout<<0xffffffff;
 cout<<"Please input the number'size:";
 cin>>size;
 if(size>0)
 {
  if(!(mapbase=(char *)calloc(0x1fffffff,sizeof(char))))
  {
   cout<<"The memory is not enough"<<endl;
   exit(0);
  }
 
  InPut_Map(mapbase,size);
 }
 else
 {
  cout<<"Size is invalided"<<endl;
  exit(0);
 }
 
 output(mapbase);
 free(mapbase);

}

版本二:

#include <iostream.h>
#include <malloc.h>
#include <stdlib.h>
#include <stdio.h>
#include <iomanip.h>
#include <ctime>
#include <windows.h>

int map[32]={
0x00000001,0x00000002,0x00000004,0x00000008,
0x00000010,0x00000020,0x00000040,0x00000080,
0x00000100,0x00000200,0x00000400,0x00000800,
0x00001000,0x00002000,0x00004000,0x00008000,
0x00010000,0x00020000,0x00040000,0x00080000,
0x00100000,0x00200000,0x00400000,0x00800000,
0x01000000,0x02000000,0x04000000,0x08000000,
0x10000000,0x20000000,0x40000000,0x80000000
};

int Random()

 int result1,result2;
 //srand((unsigned)time(0));
 
 result1=rand();
 //cout<<setiosflags(ios::left)<<setw(15)<<result1;
 result2=rand();
 //cout<<setiosflags(ios::right)<<setw(15)<<result2;
 return ((result1<<16)+result2);
}

 

void InPut_Map(int *mapbase,int size)
{

 int data;
 int i;
 int *p;
 p=mapbase;
 
 

 for(i=0;i<size;i++)
 {
  //srand((unsigned)time(0));
  data=Random();
  p+=data/32;
  (*p)=(*p)|(map[data%32]);
  p=mapbase;
  //Sleep(1000);
 }
}

void output(int * mapbase)
{
 
 int i,j;
 int count=0;
 int *p=mapbase;

 cout<<"After sorted,the number is:"<<endl;
 for(i=0;i<0x07ffffff;i++)
 { 
  p=mapbase+i;
  for(j=0;j<32;j++)
   if(((*p)&(map[j]))!=0)
   { 
    if(count%5==0)
     cout<<endl;
    cout<<setiosflags(ios::left)<<setw(15)<<(32*i+j);
    count++;
   }
 }
}

void main()

 int size;
 int *mapbase;
 
 cout<<0xffffffff;
 cout<<"Please input the number'size:";
 cin>>size;
 if(size>0)
 {
  if(!(mapbase=(int *)calloc(0x07ffffff,sizeof(int))))
  {
   cout<<"The memory is not enough"<<endl;
   exit(0);
  }
 
  InPut_Map(mapbase,size);
 }
 else
 {
  cout<<"Size is invalided"<<endl;
  exit(0);
 }
 
 output(mapbase);
 free(mapbase);

}