Giả sử chúng ta có một mảng các số nguyên; chúng ta phải sắp xếp chúng theo thứ tự tăng dần. Vì vậy, nếu mảng giống như [5,2,3,1], thì kết quả sẽ là [1,2,3,5]
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Tạo một phương thức được gọi là phân vùng, phương thức này sẽ lấy mảng, thấp và cao
-
đặt pivot:=low
-
cho tôi trong phạm vi từ thấp đến cao - 1
-
nếu nums [i]
-
-
hoán đổi nums [pivot] và nums [high]
-
Xác định một phương thức được gọi là sortArr (), phương thức này sẽ nhận mảng, thấp và cao
-
nếu thấp> =cao, thì trả về
-
partitionIndex:=partition (nums, low, high)
-
sortArr (nums, low, partitionIndex - 1)
-
sortArr (nums, partitionIndex + 1, high)
-
gọi sortArr () từ phương thức main bằng cách chuyển thấp và cao là 0 và kích thước là arr - 1
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
Ví dụ
#include <bits/stdc++.h> using namespace std; void print_vector(vector<string> v){ cout << "["; for(int i = 0; i<v.size(); i++){ cout << v[i] << ", "; } cout << "]"<<endl; } class Solution { public: int partition(vector <int>& nums, int low, int high){ int pivot = low; for(int i = low; i < high; i++){ if(nums[i] < nums[high]){ swap(nums[i], nums[pivot]); pivot++; } } swap(nums[pivot], nums[high]); return pivot; } void sortArr(vector <int>& nums, int low, int high){ if(low >= high) return; int partitionIndex = partition(nums, low, high); sortArr(nums, low, partitionIndex - 1); sortArr(nums, partitionIndex + 1, high); } vector<int> sortArray(vector<int>& nums) { sortArr(nums, 0, nums.size() - 1); return nums; } }; main(){ vector<int> v1 = {5,2,3,1}; Solution ob; print_vector(ob.sortArray(v1)); }
Đầu vào
[5,2,3,1]
Đầu ra
[1,2,3,5]