首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

資料結構:有序陣列二分查找學生身高資訊

     編輯:程式設計綜合問答

問題

n 位學生身高由小到大存於一維陣列,以身高為關鍵字查詢學生相關資訊。

演算法:二分查找 (O(log n))

int binarySearch(int[] height, int target) {
    int low = 0, high = height.length - 1;
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (height[mid] == target) return mid;      // 找到,返回索引
        else if (height[mid] < target) low = mid + 1;
        else high = mid - 1;
    }
    return -1; // 未找到
}

輸出相關資訊

若學生資訊存於結構體/類陣列 Student[] students 與身高陣列同序:

int idx = binarySearch(heights, queryHeight);
if (idx != -1) {
    Student s = students[idx];
    System.out.println("姓名:" + s.name + " 年齡:" + s.age + " 城市:" + s.city);
} else {
    System.out.println("查無此身高學生");
}

進階:重複身高處理

  • 找到一個索引後,向左右擴展收集所有相同身高學生。
  • 或
  • 使用 lower_bound/upper_bound 找到區間 [L, R)。

C++ STL 版

auto range = equal_range(heights.begin(), heights.end(), target);
for (auto it = range.first; it != range.second; ++it) {
    int idx = it - heights.begin();
    printStudent(students[idx]);
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved