数据结构学习笔记-2.顺序查找与折半查找比较

前段时间,忙于工作又将数据结构停下了一周,现在拾起继续!

 

/************************************************************************/ /* FindData.cpp 顺序查找与折半查找比较 */ /************************************************************************/ #include "StdAfx.h" #include <iostream.h> #include "dsearch.h" #include "random.h" /************************************************************************/ /* 将n元整数数组按升序排序 */ /************************************************************************/ void ExChangeSort(int a[],int n) { int i,j,temp; // 循环n-1次,排好a[0],a[1],...,a[n-2] for(i=0;i<n-1;i++) { // 将a[i]-a[n-1]中最小值置于a[i]中 for(j=i+1;j<n;j++) { // 若a[j]<a[i],则互换两元素 if (a[j]<a[i]) { temp=a[i]; a[i]=a[j]; a[j]=temp; } } } } /************************************************************************/ /* 用顺序查找在n无素数List中查找与key等值的元素,返回该数组元素的下标 */ /* 若未找到,则返回-1。 */ /************************************************************************/ int SeqSearch(DataType List[],int n,DataType key) { for(int i=0;i<n;i++) { // 返回等值数组元素的下标 if(List[i] == key) return i; } // 未找到,则返回-1 return -1; } /************************************************************************/ /* 用折半查找算法在一有序数组中查找key值。若找到,返回其下标值 */ /* 若未找到,则返回-1。 */ /************************************************************************/ int BinSearch(DataType List[],int low,int high,DataType key) { int mid; DataType midvalue; while(low<=high) { // 子表中间元素的下标、中间元素的值 mid = (low+high)/2; midvalue = List[mid]; // 找到key值,返回其下标值 if(key == midvalue) return mid; // 继续查找子表的左半部分 else if(key < midvalue) high = mid-1; // 继续查找子表的右半部分 else low = mid+1; } // 元素没有找到 return -1; } /************************************************************************/ /* Main入口函数 */ /************************************************************************/ int main() { // A为被查数组,B为key值数组 int A[100],B[100]; int i,matchCount; // 用于计时 long tcount; RandomNumber rnd; // 用随机数生成法生成10000个0-1999之间的整数放于A数组中 for(i=0;i<1000;i++) { A[i]=rnd.Random(2000); } ExChangeSort(A,1000); // 同样范围内生成500个key值置于B中 for(i=0;i<500;i++) { B[i]=rnd.Random(2000); } cout<<"Tiiming the Sequential Search:"<<endl; // 开始计时 tcoun = TickCout(); matchCount = 0; for(i=0;i<500;i++) { if(SeqSearch(A,1000,B[i]) != -1) matchCount++; } // 时间单位为1/60秒 tcount = TickCount()-tcount; cout<<"Sequential Search takes:"<<tcount/60.0 <<"seconds for"<<matchCount<<"matches."<<endl; cout<<"Timing the Binary Search:"<<endl; // 开始计时 tcount = TickCount(); matchCount = 0; for(i=1;i<500;i++) { if(BinSearch(A,0,999,B[i] != -1) matchCount++; } // 时间单位为1/60秒 tcount = TickCount() - tcount; cout<<"Sequential Search takes:"<<tcount/60.0 <<"seconds for"<<matchCount<<"matches."<<endl; }

你可能感兴趣的:(数据结构,算法,工作,list,search,ini)