Video: Lộ trình học Cấu Trúc Dữ Liệu & Giải Thuật? Học gì để đi thực tập? 2025
Ở đây, bạn tìm hiểu làm thế nào một trong những kỹ thuật phân loại phổ biến nhất được sử dụng trong Java thực sự hoạt động. Kỹ thuật này được gọi là Quicksort, và sử dụng đệ quy rất khéo léo.
Đối với hầu hết chúng ta, tìm cách phân loại các thuật toán như Quicksort làm việc chỉ đơn thuần là một bài tập trí tuệ. Java API đã sắp xếp được xây dựng sẵn
Kỹ thuật Quicksort sắp xếp một mảng các giá trị bằng cách sử dụng đệ quy. Các bước cơ bản của nó như sau:
-
Chọn một giá trị tùy ý nằm trong dải giá trị trong mảng đó.
Giá trị này là điểm chốt . Cách phổ biến nhất để chọn điểm xoay là chỉ cần chọn giá trị đầu tiên trong mảng. Folks đã viết bằng tiến sĩ về cách tinh vi hơn để chọn một điểm xoay mà kết quả trong phân loại nhanh hơn. Stick với việc sử dụng các yếu tố đầu tiên trong mảng.
-
Sắp xếp lại các giá trị trong mảng sao cho tất cả các giá trị nhỏ hơn điểm xoay nằm ở phía bên trái của mảng và tất cả các giá trị lớn hơn hoặc bằng với trục xoay nằm ở phía bên phải của mảng mảng.
giá trị chốt cho biết ranh giới giữa bên trái và bên phải của mảng. Có lẽ sẽ không phải là trung tâm chết, nhưng điều đó không quan trọng. Bước này được gọi là phân vùng, và bên trái và bên phải của các mảng là các phân vùng.
-
Bây giờ xử lý mỗi hai phần của mảng như là một mảng riêng, và bắt đầu lại với Bước 1 cho phần đó.
Đó là phần đệ quy của thuật toán.
Phần khó nhất của thuật toán Quicksort là bước phân vùng, nó phải sắp xếp lại phân vùng sao cho tất cả các giá trị nhỏ hơn điểm trục bên trái và tất cả các phần tử lớn hơn trục quay điểm nằm ở bên phải. Giả sử mảng có 10 giá trị sau:
38 17 58 22 69 31 88 28 86 12
Ở đây điểm xoay là 38, và nhiệm vụ của bước phân vùng là sắp xếp lại mảng vào một cái gì đó như sau: < 17 12 22 28 31 38 88 69 86 58
Lưu ý rằng các giá trị vẫn còn trật tự. Mảng, tuy nhiên, đã được chia khoảng giá trị 38: Tất cả các giá trị nhỏ hơn 38 là bên trái của 38, và tất cả các giá trị lớn hơn 38 là bên phải của 38.
Bây giờ bạn có thể chia mảng thành hai phân vùng ở giá trị 38 và lặp lại quá trình cho mỗi bên. Giá trị trục chính đi với phân vùng bên trái, do đó phân vùng bên trái là:
17 12 22 28 31 38
Thời gian này, bước phân vùng chọn 17 làm điểm xoay và sắp xếp lại các phần tử như sau: > 12 17 22 28 31 38
Như bạn thấy, phần này của mảng được sắp xếp ngay bây giờ.Thật không may, Quicksort không nhận ra rằng vào thời điểm này, vì vậy phải mất thêm một vài lần nữa để chắc chắn. Nhưng đó là quá trình cơ bản.