Kỹ thuật quicksort được thực hiện bằng cách tách danh sách thành hai phần. Ban đầu, một phần tử xoay được chọn bằng thuật toán phân vùng. Phần bên trái của pivot giữ các giá trị nhỏ hơn pivot và phần bên phải giữ giá trị lớn hơn. Sau khi phân vùng, mỗi danh sách riêng biệt được phân vùng bằng cách sử dụng cùng một thủ tục.
Trong trường hợp này, chúng tôi đang chọn phần tử xoay một cách ngẫu nhiên. Sau khi chọn trục, chúng tôi đang thực hiện phân vùng, sau đó sắp xếp mảng một cách đệ quy.
Sự phức tạp của Kỹ thuật Quicksort
-
Độ phức tạp về thời gian - O (n log n) cho trường hợp tốt nhất và trường hợp trung bình, O (n 2 ) cho trường hợp xấu nhất.
-
Độ phức tạp của không gian - O (log n)
Đầu vào - Danh sách chưa sắp xếp:90 45 22 11 22 50
Đầu ra - Mảng sau khi sắp xếp:11 22 22 45 50 90
Thuật toán
phân vùng (mảng, dưới, trên)
Đầu vào - Mảng tập dữ liệu, ranh giới dưới và ranh giới trên
Đầu ra - Xoay đúng vị trí
Begin index:=low pivot:=cao hơn đối với i trong phạm vi từ thấp hơn đến cao hơn, thực hiện nếu array [i]random_pivot_partition (mảng, dưới, trên)
Đầu vào - Mảng tập dữ liệu, ranh giới dưới và ranh giới trên
Đầu ra - Chỉ mục cuối cùng của trục được chọn ngẫu nhiên
Begin n:=a random number pvt:=Lower + n mod (upper - under + 1) trao đổi các giá trị của array [pivot] và array [upper] index:=Partition (array, under, upper) return indexEndquickSort (mảng, trái, phải)
Đầu vào - Một mảng dữ liệu và giới hạn dưới và trên của mảng
Đầu ra - Mảng được sắp xếp
Begin if lowMã mẫu
#include#include #include #define MAX 100using namespace std; void random_shuffle (int arr []) {// hàm xáo trộn các phần tử mảng vào các vị trí ngẫu nhiên srand (time (NULL )); for (int i =MAX - 1; i> 0; i--) {int j =rand ()% (i + 1); int temp =arr [i]; arr [i] =arr [j]; arr [j] =temp; }} // Phân vùng mảng trên cơ sở các giá trị cao như pivot value.int Partition (int a [], int low, int high) {int pivot, index, i; chỉ số =thấp; pivot =cao; for (i =low; i Đầu ra
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100