從排列好的Int Array中找指定的值

  • 2527
  • 0
  • 2011-04-21

摘要:從排列好的Int Array中找指定的值

最近看到了一個題目,詳細的內容有點忘了QQ"
不過大概是:
從排列好的陣列中找指定的值,依照規定的介面,並使用遞迴方式。
規定的介面:
/// <summary>
///
/// </summary>
/// <param name="SortedArray">排列好的陣列</param>
/// <param name="SearchValue">要找的值</param>
/// <returns>陣列位置</returns>
public int SearchArray(int[] SortedArray, int SearchValue){   }

我想到兩個方法,一個是使用泛型方法Array.FindIndex,另一個是寫BinarySearch,
不過規定要用遞回的話,就只能自己寫BinarySearch了,不然FindIndex其實很好用的說>"<

第一種方法(Array.FindIndex):
public int SearchArray(int[] SortedArray, int SearchValue)
{  
      return Array.FindIndex(SortedArray, x => x == SearchValue);
}

 

第二種方法(BinarySearch):
public int SearchArray(int[] SortedArray, int SearchValue)
{
      return BinarySearch(SortedArray, SearchValue, 0, SortedArray.Length - 1);
}
private int BinarySearch(int[] SortedArray, int SearchValue, int start, int end)
    {
        if (start == end)
        {
            if (SortedArray[end] == SearchValue)
                return end;
            else
                return -1;
        }             
        int pos = (start + end) / 2;
        int compareResult = Compare(SearchValue, SortedArray[pos]);
        if (compareResult == 0)
        {
            return pos;
        }
        else if (compareResult > 0)
        {
            return BinarySearch(SortedArray, SearchValue, pos + 1, end);
        }
        else
        {
            return BinarySearch(SortedArray, SearchValue, start, pos - 1);
        }
    }
    private int Compare(int iInput1, int iInput2)
    {
        if (iInput1 == iInput2)
            return 0;
        else if (iInput1 > iInput2)
            return 1;
        else 
            return -1;
    }

 

如果有其他解法,請跟我說,謝謝您~