摘要:從排列好的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;
}
如果有其他解法,請跟我說,謝謝您~