該方法用於通過數組的每個元素和指定對象實現的IComparable接口在整個一維排序數組中搜索特定元素。
用法:
public static int BinarySearch (Array array, object value);
參數:
- array:它是要搜索的已排序的一維數組。
- value:它是要搜索的對象。
返回值:如果找到該值,則返回指定數組中指定值的索引,否則返回負數。返回值有以下幾種不同的情況:
- 如果未找到該值並且 value 小於數組中的一個或多個元素,則返回的負數是大於 value 的第一個元素的索引的按位補碼。
- 如果未找到該值並且該值大於數組中的所有元素,則返回的負數是(最後一個元素的索引加 1)的按位補碼。
- 如果使用未排序的數組調用此方法,則返回值可能不正確並且可能返回負數,即使該值存在於數組中。
異常:
- ArgumentNullException:如果數組為空。
- RankException:如果數組是多維的。
- ArgumentException:如果值的類型與數組元素不兼容。
- InValidOperationException:如果該值未實現 IComparable 接口,並且搜索遇到未實現 IComparable 接口的元素。
以下示例程序旨在說明上麵討論的方法:
範例1:
// C# program to illustrate the
// Array.BinarySearch(Array, Object)
// Method
using System;
class GFG {
// Main Method
public static void Main(String[] args) {
// taking an 1-D Array
int[] arr = new int[7] {1,5,7,4,6,2,3};
// for this method array
// must be sorted
Array.Sort(arr);
Console.Write("The elements of Sorted Array:");
// calling the method to
// print the values
display(arr);
// taking the element which is
// to search for in a variable
// It is not present in the array
object s = 8;
// calling the method containing
// BinarySearch method
result(arr, s);
// taking the element which is
// to search for in a variable
// It is present in the array
object s1 = 4;
// calling the method containing
// BinarySearch method
result(arr, s1);
}
// containg BinarySearch Method
static void result(int[] arr2, object k) {
// using the method
int res = Array.BinarySearch(arr2, k);
if (res < 0)
{
Console.WriteLine("\nThe element to search for "+
"({0}) is not found.", k);
}
else
{
Console.WriteLine("The element to search for "+
"({0}) is at index {1}.", k, res);
}
}
// display method
static void display(int[] arr1)
{
// Displaying Elements of array
foreach(int i in arr1)
Console.Write(i + " ");
}
}
輸出:
The elements of Sorted Array:1 2 3 4 5 6 7 The element to search for (8) is not found. The element to search for (4) is at index 3.
範例2:
// C# program to illustrate the
// Array.BinarySearch(Array, Object)
// Method
using System;
class GFG {
// Main Method
public static void Main(String[] args) {
// taking an 1-D Array
int[] arr = new int[7] {1,5,7,4,6,2,3};
// for this method array
// must be sorted
Array.Sort(arr);
Console.Write("The elements of Sorted Array:");
// calling the method to
// print the values
display(arr);
// it will return a negative value as
// 9 is not present in the array
Console.WriteLine("\nIndex of 9 is:"+
Array.BinarySearch(arr,8));
}
// display method
static void display(int[] arr1)
{
// Displaying Elements of array
foreach(int i in arr1)
Console.Write(i + " ");
}
}
輸出:
The elements of Sorted Array:1 2 3 4 5 6 7 Index of 9 is:-8
要點:
- 對於此方法,數組必須按排序順序,即升序。
- 此方法不支持搜索包含負索引的數組。
- 允許重複元素。如果 Array 包含多個等於該值的元素,則該方法僅返回一個出現的索引,而不一定是第一個。
- 空值始終可以與任何其他引用類型進行比較;因此,與 null 的比較不會產生異常。
- 這種方法是一種
O(log n)
操作,其中 n 是數組的長度。
參考:
相關用法
- HTML DOM Object用法及代碼示例
- C# Object.GetHashCode()用法及代碼示例
- C# Object.GetTypeCode()用法及代碼示例
- C# Array.BinarySearch(Array, Int32, Int32, Object)用法及代碼示例
- C# Object.MemberwiseClone用法及代碼示例
- C# Array.BinarySearch(Array, Int32, Int32, Object, IComparer)用法及代碼示例
- C# Array.BinarySearch(Array, Object, IComparer)用法及代碼示例
- C# Byte.CompareTo(Object)用法及代碼示例
- C# Byte.Equals(Object)用法及代碼示例
- C# Object.ReferenceEquals()用法及代碼示例
- C# Uri.Equals(Object)用法及代碼示例
- C# Boolean.Equals(Object)用法及代碼示例
- C# Boolean.CompareTo(Object)用法及代碼示例
注:本文由純淨天空篩選整理自saurabh_1901大神的英文原創作品 Array.BinarySearch(Array, Object) Method with examples in C#。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。