Tôi đã có câu hỏi này gần đây trong một cuộc phỏng vấn và tôi đã thất bại, và bây giờ tìm kiếm câu trả lời.Thuật toán nào được sử dụng để tìm mảng con thứ n được sắp xếp của một mảng không có thứ tự?
Giả sử tôi có một mảng lớn gồm n số nguyên, tất cả đều khác nhau.
Nếu mảng này được đặt hàng, tôi có thể chia nhỏ mảng này thành x nhỏ hơn mảng, tất cả kích thước y, ngoại trừ số cuối cùng, có thể ít hơn. Tôi có thể trích xuất phần con thứ n và trả về nó, đã được sắp xếp.
Ví dụ: Mảng 4 2 5 1 6 3. Nếu y = 2 và tôi muốn các mảng thứ 2, nó sẽ là 3 4.
Bây giờ những gì tôi đã chỉ đơn giản là sắp xếp mảng và trả lại sub subarray, trong đó có O (n log n
). Nhưng nó đã được nói với tôi rằng có tồn tại một cách để làm điều đó trong O(n + y log y)
. Tôi đã tìm kiếm trên internet và không tìm thấy gì cả. Ý tưởng?
Mảng có bắt đầu từ 1 theo thứ tự tăng dần (chỉ cần xáo trộn) (ví dụ: 3,1,2,4) không? Hay là số ngẫu nhiên nhảy? (ví dụ: 1,12,3,5) – user3437460
Từ những gì tôi undestood, nó là con số ngẫu nhiên, điều kiện tiên quyết duy nhất là họ là tất cả khác nhau. –
Hãy suy nghĩ về cách thức hoạt động của quicksort và sau đó nghĩ cách bạn sử dụng nó để đảm bảo rằng các phần tử mảng 101 đến 150 được sắp xếp. Gợi ý: Điều đó có nghĩa là bạn không cần phải sắp xếp nói các yếu tố 1 đến 100 khi quicksort sẽ làm như vậy. – gnasher729