第三周作业——顺序查找和二分查找

  1. #include <iostream>  
  2. #include <fstream>  
  3. using namespace std;  
  4.   
  5. #define TXT_NUM_COUNT 1000000  
  6. #define TARGET_COUNT 16  
  7.   
  8. int ImportToArray(const char *filename,int *array)  //将filename内的纯数字文本导入数组array;  
  9. {  
  10.     int count=0;  
  11.     ifstream fin;  
  12.     fin.open(filename);  
  13.     if( fin.fail() )  
  14.     {  
  15.         cout<<"file read fail!"<<endl;  
  16.         return -1;  
  17.     }  
  18.     while( fin.eof() ==false )  
  19.         fin>>array[count++];  
  20.     fin.close();  
  21.     return count;  
  22. }  
  23.   
  24. //顺序查找  
  25. int SSearch(int *array, int low, int high, int target )//返回待查数据下标,-1为查找失败  
  26. {  
  27.     while(low<=high)  
  28.     {  
  29.         if(target==array[low])  
  30.             return low;  
  31.         else  
  32.             ++low;  
  33.     }  
  34.     return -1;  
  35. }  
  36.   
  37. //二分查找  
  38. int BSearch(int *array, int low, int high, int target ) //target为待查数据,返回待查数据的下标.-1为查找失败  
  39. {  
  40.   
  41.     while(low<=high)  
  42.     {  
  43.         int mid=(low+high)/2;  
  44.         if(target==array[mid])  
  45.             return mid;  
  46.         else if(target<array[mid])  
  47.             high=mid-1;  
  48.         else  
  49.             low=mid+1;  
  50.     }  
  51.     return -1;  
  52. }  
  53.   
  54. void main()  
  55. {  
  56.     int *list=new int[TXT_NUM_COUNT];  
  57.     int *target=new int[TARGET_COUNT];  
  58.     int count_largeW=ImportToArray("largeW_bubble.txt",list);       //已知有100W个数据,待查16个;  
  59.     int count_tinyW=ImportToArray("tinyW.txt",target);  
  60.   
  61.     for(int i=0;i<TARGET_COUNT;i++)  
  62.     {  
  63.         if( -1 == BSearch(list,0,count_largeW-1,target[i]) )  
  64.             cout<<target[i]<<endl;  
  65.     }  
  66.   
  67.   
  68.     delete [] target;  
  69.     delete [] list;  
  70.   
  71.     ////测试  
  72.     //int array[]={10,20,23,25,50,90,239,611};  
  73.     //int len=(sizeof(array)/sizeof(int));  
  74.     //int num;  
  75.     //while(cin>>num,num!=-1)  
  76.     //{  
  77.     //  cout<<SSearch(array,0,len-1,num)<<endl;  
  78.     //}  
  79. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值