二分排序算法

时间:2021-12-21 12:26:20

本人比较喜欢递归,但这里有两种做法

//============非递归做法========================//

#include <iostream>

using namespace std;
int a[11];
int BinSearch(int s[], int size, int key)
{
int low=0, high = size - 1, mid;
while(low <= high)
{
mid=(low + high)/2;
if(s[mid] == key)
return mid;
if(s[mid] > key)
high=mid-1;
else
low=mid+1;
}
return -1;
}
int main()
{
printf("请输入十个整数:\n");
for(int i=1; i<11; ++i)
scanf("%d",&a[i]);
printf("%d", BinSearch(a, 11, 10));
return 0;

}


//==========================递归==================//

  1. int BinSearch(int Array[],int low,int high,int key)  
  2. {  
  3.     if (low<=high)  
  4.     {  
  5.         int mid = (low+high)/2;  
  6.         if(key == Array[mid])  
  7.             return mid;  
  8.         else if(key<Array[mid])  
  9.             return BinSearch(Array,low,mid-1,key);  
  10.         else if(key>Array[mid])  
  11.             return BinSearch(Array,mid+1,high,key);  
  12.     }  
  13.     else  
  14.         return -1;  
  15. }