Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Phương thức Array.BinarySearch(Array, Object) trong C# với ví dụ

Phương thức Array.BinarySearch(Array, Object) trong C# được dùng để tìm kiếm một phần tử cụ thể trong toàn bộ mảng một chiều đã được sắp xếp, sử dụng giao diện IComparable được triển khai bởi từng phần tử của mảng và đối tượng được chỉ định.

Cú pháp

public static int BinarySearch(Array array, object value);
  • array: Mảng một chiều đã sắp xếp.
  • value: Đối tượng cần tìm kiếm.

Trả về: Chỉ mục từ 0 của phần tử nếu tìm thấy; ngược lại trả về số âm (bitwise complement của chỉ mục chèn).

Ví dụ 1: Tìm kiếm trong mảng số nguyên

using System;

public class Demo
{
    public static void Main()
    {
        int[] intArr = { 5, 10, 15, 20 };

        // BinarySearch BẮT BUỘC mảng đã sắp xếp
        Array.Sort(intArr);

        Console.WriteLine("Các phần tử mảng...");
        foreach (int i in intArr)
        {
            Console.WriteLine(i);
        }

        Console.Write("Chỉ mục của 20 = " + Array.BinarySearch(intArr, 20));
    }
}

Kết quả

Các phần tử mảng...
5
10
15
20
Chỉ mục của 20 = 3

Ví dụ 2: Tìm kiếm trong mảng chuỗi

using System;

public class Demo
{
    public static void Main()
    {
        string[] strArr = { "John", "Tim", "Fedric", "Gary", "Harry", "Damien" };

        Array.Sort(strArr);

        Console.WriteLine("Các phần tử mảng...");
        foreach (string s in strArr)
        {
            Console.WriteLine(s);
        }

        Console.Write("Chỉ mục của 'Gary' = " + Array.BinarySearch(strArr, "Gary"));
        Console.Write("\nChỉ mục của 'Tom' = " + Array.BinarySearch(strArr, "Tom"));
    }
}

Kết quả

Các phần tử mảng...
Damien
Fedric
Gary
Harry
John
Tim
Chỉ mục của 'Gary' = 2
Chỉ mục của 'Tom' = -7

Giải thích kết quả âm

Khi phần tử không tìm thấy, BinarySearch trả về phép bổ sung bitwise (bitwise complement) của chỉ mục chèn:

  • Kết quả -7 nghĩa là: ~(-7) = 6 → phần tử nên được chèn tại chỉ mục 6 (cuối mảng).
  • Công thức: index = ~returnValue hoặc index = -returnValue - 1.

Các nạp chồng quan trọng

Phương thức Mô tả
BinarySearch<T>(T[], T) Generic, an toàn kiểu, dùng IComparable<T>
BinarySearch(Array, Object, IComparer) Cho phép chỉ định comparer tùy chỉnh
BinarySearch(Array, Int32, Int32, Object) Tìm trong phạm vi con của mảng
BinarySearch<T>(T[], T, IComparer<T>) Generic với comparer tùy chỉnh

Lưu ý quan trọng

  • Mảng PHẢI được sắp xếp trước (Array.Sort) theo thứ tự tăng dần.
  • Các phần tử phải triển khai IComparable (các kiểu cơ bản: int, string, double... đã làm).
  • Nếu mảng chứa phần tử trùng lặp, kết quả trả về là chỉ mục của một trong các phần tử khớp (không đảm bảo là cái đầu hoặc cuối).
  • Hiệu suất O(log n) so với O(n) của tìm kiếm tuyến tính.