1. 程式人生 > >有序陣列的查詢(個人感覺美到極致的一個演算法)

有序陣列的查詢(個人感覺美到極致的一個演算法)

對於包含n個元素的陣列,整個查詢過程大約要經過logn次比較。(二分查詢演算法)
程式碼如下:
非遞迴版本


int BinarySearch(int array[],int n,int value)
{
    int left = 0;
    int right = n-1;
    //如果上面這句是int right = n的話,則下面有兩處需要改動
    //while(left < right)
    //array[middle]>value的時候 right = mid(基本沒有這樣寫的)
    while (left <= right)
    {
        int
mid = left + ((right-left)>>1);//位運算更快 if (array[mid] > value) { right = mid-1; } else if (array[mid] < value) { left = mid+1; } else return mid;//返回的是位置 } return -1; }

遞迴版本


int BinarySearch(int
array[],int left,int right,int value) { if (left > right) { return -1; } int mid = left + ((right-left)>>1); if (array[mid] > value) { return BinarySearch(array,left,mid-1,value); } else if (array[mid
] < value) { return BinarySearch(array,mid+1,right,value); } else return mid; }