Điều bạn đang đề cập đến là Thuật toán lựa chọn, như đã lưu ý trước đây. Cụ thể, tham chiếu đến quicksort cho thấy bạn đang nghĩ đến số partition based selection.
Dưới đây là cách hoạt động:
- Giống như trong Sắp xếp nhanh, bạn bắt đầu bằng cách chọn một tốt trục: một cái gì đó mà bạn nghĩ là gần một nửa chiều qua danh sách của bạn. Sau đó, bạn xem toàn bộ danh sách các mục hoán đổi mọi thứ cho đến khi tất cả các mục nhỏ hơn trục của bạn nằm ở đầu danh sách và mọi thứ lớn hơn trục của bạn đều ở cuối. Trục của bạn đi vào vị trí còn sót lại ở giữa.
- Thông thường trong một quicksort bạn muốn recurse trên cả hai mặt của trục, nhưng đối với Selection Algorithm bạn sẽ chỉ recurse trên mặt có chứa các chỉ số bạn quan tâm. Vì vậy, nếu bạn muốn để tìm giá trị thấp nhất thứ 3 , hãy xem lại bất kỳ bên nào chứa chỉ mục 2 (vì chỉ mục 0 là giá trị thấp nhất thứ nhất).
- Bạn có thể dừng đệ quy khi bạn đã thu hẹp khu vực thành chỉ một chỉ số . Cuối cùng, bạn sẽ có một số danh sách chưa được phân loại của các đối tượng nhỏ nhất "m-1" và một danh sách chưa được phân loại khác của các đối tượng lớn nhất là "n-m" . Đối tượng thứ "m" sẽ được inbetween.
Thuật toán này cũng tốt cho việc tìm danh sách các phần tử m cao nhất được sắp xếp ... chỉ cần chọn phần tử lớn nhất m'th và sắp xếp danh sách ở trên phần tử đó. Hoặc, đối với một thuật toán nhanh hơn một chút, hãy thực hiện thuật toán Quicksort, nhưng từ chối để recurse vào các khu vực không chồng chéo khu vực mà bạn muốn tìm các giá trị được sắp xếp.
Điều thực sự gọn gàng về điều này là nó thường chạy trong thời gian O (n). Lần đầu tiên thông qua, nó thấy toàn bộ danh sách. Trên đệ quy đầu tiên, nó thấy khoảng một nửa, sau đó một phần tư, vv Vì vậy, nó nhìn vào khoảng 2n yếu tố, do đó nó chạy trong O (n) thời gian. Thật không may, như trong quicksort, nếu bạn liên tục chọn một trục xấu, bạn sẽ chạy trong thời gian O (n).
Âm thanh như thuật toán này nói chung là thời gian O (nm), n là chiều dài danh sách, m như trong phần tử nhỏ nhất thứ m. – Noldorin
Đây chỉ là một loại sắp xếp. – newacct
Có, đây chỉ là phân loại bằng cách sử dụng ngăn xếp – Learner