二分法的不同语言实现

上一篇 / 下一篇  2013-01-21 23:51:54 / 个人分类:后端开发与编程

  本帖旨在通过“二分法”记忆不同语言的语法特点:
一、java
public class BubbleTest
{
public static int binary(int[] array, int value)
{
int low = 0;
int high = array.length - 1;
while(low <= high)
{
int middle = (low + high) / 2;
if(value == array[middle])
{
return middle;
}
if(value > array[middle])
{
low = middle + 1;
}
if(value < array[middle])
{
high = middle - 1;
}
}
return -1;
}
public static void main(String[] args)
{
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int value = binary(a, 9);
System.out.println(value);
}
}

二、C:
#include <stdio.h>
//递归算法
int recurbinary(int *a,int key,int low,int high)
{
int mid;
if(low > high)
return -1;
mid = (low + high)/2;
if(a[mid] == key) return mid;
else if(a[mid] > key)
return recurbinary(a,key,low,mid -1);
else
return recurbinary(a,key,mid + 1,high);
}
//非递归算法[1]
int binary( int *a, int key, int n )
{
int left = 0, right = n, mid;
mid = ( left + right ) / 2;
while( left <= right && a[mid] != key )
{
if( a[mid] < key )
left = mid + 1;
else if( a[mid] > key )
right = mid - 1;
mid = ( left + right ) / 2;
}
if( a[mid] == key )
return mid;
return -1;
}

int main()
{
int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};
int b[] = { 677, 1, 7, 11, 67 };
int i;
for( i=0; i<sizeof(b)/sizeof(b[0]); i++ )
{
printf( "%d\n", recurbinary(a,99,0,sizeof(a)/sizeof(a[0])-1) );
//printf( "%d\n", binary( a, 45, sizeof(a)/sizeof(a[0])-1 ));
}
return 0;
}

三、C++:
#include<iostream>
#define N 10
using namespace std;
int main()
{
int a[N],front,end,mid,x,i;
cout<<"请输入已排好序的a数组元素:"<<endl;
for(i=0;i<N;i++)
cin>>a[i];
cout<<"请输入待查找的数x:"<<endl;
cin>>x;
front=0;
end=N-1;
mid=(front+end)/2;
while(front<end&&a[mid]!=x)
{
if(a[mid]<x)front=mid+1;
if(a[mid]>x)end=mid-1;
mid=(front+end)/2;
}
if(a[mid]!=x)
printf("没找到!\n");
else
printf("找到了,在第%d项里",mid+1);
return 0;
}

四、VBS:
Function BubbleTest(find,strArr)
   Dim low, high, middle
   low = 0
   high = ubound(strArr)
   Do while low <= high
       middle = (low + high) / 2
  If find = strArr(middle) Then
  BubbleTest = true
  elseif find > strArr(middle) then
      low = middle + 1
  else
      high = middle - 1      
end if
   Loop
   BubbleTest = false
End Function

Dim myArr,exist
myArr = array("13","15","17","18","20")
exist = BubbleTest("17",myArr)
msgbox exist

五、javascript.:
function BubbleTest(find,strArr)
{
  var low, high, middle
  low = 0
  high = strArr.length - 1
  while(low <= high)
  {
    middle = (low + high)/2
    if(find == strArr[middle])
      return true
    else if(find > strArr[middle])
      low = middle + 1
    else
      high = middle - 1
  }
  return false
}
var myArr = Array("13","15","17","18","20")
var exist = BubbleTest("17",myArr)
alert(exist)


TAG:

 

评分:0

我来说两句

Open Toolbar