1 #include "stdio.h" 2 #include "iostream" 3 #include "stdlib.h" 4 #include "time.h" 5 6 const int size=1000; 7 typedef long RecType; 8 typedef struct 9 { RecType rec[size+1]; 10 int n; 11 } SqTable; 12 13 //顺序查找 14 void SeqSearch(SqTable R,RecType k,int &i,int &j) 15 { 16 j=0; 17 R.rec[0]=k; 18 i=R.n; 19 while(R.rec[i]!=k) 20 { 21 i--; 22 j++; 23 } 24 25 } 26 27 void print(SqTable R,int n) 28 { 29 for(int i=1;i<=n;i++) 30 { 31 printf("%7d",R.rec[i]); 32 if(i%10==0) 33 printf(" "); 34 } 35 36 } 37 38 //排序 39 void sort(SqTable &R,int n) 40 { 41 RecType temp; 42 for(int i=1;i<=n;i++) 43 for(int j=i+1;j<=n;j++) 44 if(R.rec[i]>R.rec[j]) 45 { 46 temp=R.rec[i]; 47 R.rec[i]=R.rec[j]; 48 R.rec[j]=temp; 49 50 } 51 52 } 53 54 //折半查找 55 int BinSearch(SqTable R,RecType k,int &j) 56 { 57 int low,high,mid=0; 58 low=1; 59 high=R.n; 60 while(low<high) 61 { 62 mid=(low+high)/2; 63 j++; 64 if(k==R.rec[mid]) 65 return (mid); 66 else if(k<R.rec[mid]) 67 high=mid-1; 68 else 69 low=mid+1; 70 } 71 72 73 } 74 75 void main() 76 { 77 SqTable R,A; 78 RecType x; 79 int i,j,n; 80 int k; 81 do 82 { 83 printf(" "); 84 printf(" 查找子系统 "); 85 printf(" ***************************** "); 86 printf(" * 1----产生数据 * "); 87 printf(" * 2----顺序查找 * "); 88 printf(" * 3----二分查找 * "); 89 printf(" * 4----打印数据 * "); 90 printf(" * 0----返 回 * "); 91 printf(" ***************************** "); 92 printf(" 请选择菜单项(0-4):"); 93 scanf("%d",&k); 94 switch(k) 95 { 96 case 1://随机产生数据 97 printf("请输入要产生随机数的个数(n<=%d)n= ",size); 98 scanf("%d",&n); 99 srand((unsigned)time( NULL )); 100 for (i=1;i<=n;i++) 101 A.rec[i]=R.rec[i]=rand(); 102 A.n=R.n=n; 103 break; 104 case 2://顺序查找 105 printf("请输入要查找的关键字:"); 106 scanf("%ld",&x); 107 SeqSearch(R,x,i,j); 108 if (i==0) 109 printf("没有此数据!!!"); 110 else printf("在 %d 个下标,第 %d 次找到。",i,j); 111 break; 112 case 3://二分查找 113 sort(A,n); 114 print(A,n); 115 printf("请输入要查找的关键字:"); 116 scanf("%ld",&x); 117 j=0; 118 i=BinSearch(A,x,j); 119 if (i==0) printf("没有此数据!!!"); 120 else printf("在 %d 个下标,第 %d 次找到。",i,j); 121 122 break; 123 case 4: 124 print(A,n); 125 } 126 }while (k!=0); 127 }