TheAlgorithms / TheAlgorithms/Java

[FEATURE REQUEST] Add Search in Rotated Sorted Array implementation with JUnit tests

Đang mở
#7,579 4 bình luận 0 reaction 2 người được giao Xem trên GitHub

@Vivek-ML001 đang làm issue này rồi.

Từ ngày 27/8/2026.

enhancement
Ngôn ngữ chính
Java
Star
66.3k
Fork
21.3k
Merge trung bình
16 giờ 57 phút
Pull request đã merge (30 ngày)
23

Mô tả

What would you like to Propose?
Feature Description

I would like to propose adding an implementation of Search in Rotated Sorted Array in Java using the Binary Search technique.

This is a classic variation of Binary Search that achieves $\mathcal{O}(\log N)$ time complexity by checking which half of the rotated array is sorted at each step.

Proposed Changes

I would like to add:

  1. SearchInRotatedArray.java under src/main/java/com/thealgorithms/searches/
    • Complete implementation with clear Javadoc explanations ($\mathcal{O}(\log N)$ Time, $\mathcal{O}(1)$ Space).
    • Proper null checks and edge-case handling.
  2. SearchInRotatedArrayTest.java under src/test/java/com/thealgorithms/searches/
    • Comprehensive JUnit 5 test suite covering standard rotations, target not found, empty arrays, and single-element arrays.
Verification

I will ensure all code follows the project's formatting rules and passes ./gradlew test / mvn test locally before opening a PR.


I would love to implement this as my first open-source contribution! Could a maintainer please assign this issue to me?

Issue details
Issue Details & Algorithm Overview
1. Algorithm Description
  • Algorithm: Search in Rotated Sorted Array
  • Category: Searching Algorithms / Binary Search Variation
  • Language: Java
2. How the Algorithm Works

Given a sorted array of integers that has been rotated at an unknown pivot index (e.g., [0, 1, 2, 4, 5, 6, 7] becomes [4, 5, 6, 7, 0, 1, 2]), find the index of a given target element. If the element is not present, return -1.

Key Logic:

  1. Find the middle element using int mid = left + (right - left) / 2; to avoid integer overflow.
  2. Check if the left half of the array (nums[left] to nums[mid]) is sorted:
    • If sorted, check if the target falls within nums[left] and nums[mid]. Adjust left or right boundaries accordingly.
  3. Otherwise, the right half must be sorted:
    • Check if the target falls within nums[mid] and nums[right]. Adjust boundaries accordingly.
3. Complexity Analysis
  • Time Complexity: $\mathcal{O}(\log N)$ — Divides the search space in half at each iteration.
  • Space Complexity: $\mathcal{O}(1)$ — Uses constant iterative space without recursion stacks or extra memory allocation.
4. Planned Files & Folder Structure
  • src/main/java/com/thealgorithms/searches/SearchInRotatedArray.java (Implementation)
  • src/test/java/com/thealgorithms/searches/SearchInRotatedArrayTest.java (JUnit 5 Test Suite)
Additional Information

No response

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.