查找一:C++静态查找

  1 #include<iostream>
  2 using namespace std;
  3 #define MAXSIZE 100
  4 
  5 int Seq_Search(int *a, int n, int key)
  6 {
  7     int i;
  8     for(i=0; i<n;i++)
  9     {
 10         if(a[i]==key)
 11             return i; 
 12     }
 13     return 0;
 14 }
 15 
 16 //折半查找
 17 int In_Search(int *a, int n, int key)
 18 {
 19     int low, high, mid;
 20     low = 0; 
 21     high = n-1;
 22     while(low<high)
 23     {
 24         mid = (low+high)/2;
 25         if(a[mid]>key)
 26         {
 27             high--;
 28         }
 29         else if(a[mid]<key)
 30         {
 31             low++;
 32         }
 33         else
 34             return mid;
 35     }
 36     return 0;
 37 }
 38 
 39 //插值查找
 40 int Insert_Search(int *a, int n, int key)
 41 {
 42     int low, high, mid;
 43     low = 0; 
 44     high = n-1;
 45     while(low<high)
 46     {
 47         //插值
 48         mid = low + (high-low)*(key-a[low])/(a[high]-a[low]); 
 49         if(a[mid]>key)
 50         {
 51             high--;
 52         }
 53         else if(a[mid]<key)
 54         {
 55             low++;
 56         }
 57         else
 58             return mid;
 59     }
 60     return 0;
 61 }
 62 
 63 //斐波那契数列
 64 void  Fibonacci(int *F)
 65 {
 66     F[0] = 0;
 67     F[1] = 1;
 68     for(int i=2;i<MAXSIZE;i++)
 69     {
 70         F[i] = F[i-1] + F[i-2];
 71     }
 72 }
 73 
 74 //斐波那契查找
 75 int Fibonacci_Search(int *a, int n, int key)
 76 {
 77     int low = 0;
 78     int high = n-1;
 79     int mid;
 80     int F[MAXSIZE];
 81     Fibonacci(F);
 82     int k =0;
 83     while(n>F[k]-1)
 84         k++;
 85     int *temp = new int[F[k]-1];
 86     memcpy(temp,a,n*sizeof(int));
 87     for(int i=n;i<F[k]-1;i++)
 88         temp[i] = a[n-1];
 89 
 90     while(low<high)
 91     {
 92         mid = low + F[k-1] - 1;
 93         if(key<temp[mid])
 94         {
 95             high = mid-11;
 96             k = k-1;
 97         }
 98         else if(key>temp[mid])
 99         {
100             low = mid+1;
101             k = k-2;
102         }
103         else
104         {
105             if(mid<n)
106                 return mid;
107             else
108                 return n-1;
109         }
110     }
111     delete[] temp;
112     return -1;
113 }
114 
115 int main()
116 {
117     int a[MAXSIZE];
118     for(int i=0;i<MAXSIZE;i++)
119         a[i] = i+1;
120     cout << Seq_Search(a,MAXSIZE,45)<<endl;
121     cout << In_Search(a,MAXSIZE,45)<<endl;
122     cout << Insert_Search(a,MAXSIZE,45)<<endl;
123 
124     int arr[] = {0,16,24,35,47,59,62,73,88,99};  
125     int key=73; 
126     int index=Fibonacci_Search(arr,sizeof(arr)/sizeof(int),key);  
127     cout<<key<<" is located at: "<<index;  
128 
129     system("PAUSE");  
130     return 0;  
131 }

 

posted @ 2015-10-06 23:54  jx_yangbo  阅读(294)  评论(0编辑  收藏  举报