1. 程式人生 > >二分插入排序+二分搜尋

二分插入排序+二分搜尋

 1 #include <cstdio>
 2 #include <cstdlib>
 3 #include <ctime>
 4 const int N=100;
 5 int n=50,step;
 6 int in[N];
 7 void binsort()
 8 {
 9     int l,r,id;
10     for (int i=1;i<n;i++)
11     {
12         l=0;r=i-1;int temp=in[i];
13         while (l<=r)
14         {
15             int
mid=(l+r)/2; 16 if (temp<in[mid]) 17 { 18 r=mid-1; 19 } 20 else 21 { 22 l=mid+1; 23 } 24 } 25 for (int j=i-1;j>=l;j--) 26 { 27 in[j+1]=in[j]; 28 }
29 in[l]=temp; 30 } 31 } 32 int binsearch(int want) 33 { 34 int l,r,mid; 35 l=0;r=n-1; 36 while (l<=r) 37 { 38 step++; 39 mid=(l+r)/2; 40 if (in[mid]==want) 41 { 42 return 1; 43 } 44 else if (in[mid]>want) 45 {
46 r=mid-1; 47 } 48 else 49 { 50 l=mid+1; 51 } 52 } 53 return 0; 54 } 55 int main() 56 { 57 srand(time(0)); 58 for (int i=0;i<n;i++) 59 { 60 in[i]=rand()%100; 61 printf("%d ",in[i]); 62 } 63 printf("\n"); 64 binsort(); 65 for (int i=0;i<n;i++) 66 { 67 printf("%d ",in[i]); 68 } 69 printf("\n"); 70 int ans,want; 71 step=0; 72 scanf("%d",&want); 73 ans=binsearch(want); 74 printf("%d step:%d\n",ans,step);//注意不能寫成printf("%d step:%d\n",binsearch(want),step);!!! 75 76 return 0; 77 }