Untitled
unknown
plain_text
2 years ago
2.2 kB
9
Indexable
//{ Driver Code Starts #include <bits/stdc++.h> using namespace std; // } Driver Code Ends //User function template for C++ class Solution{ public: void merge(int arr[], int l, int m, int r) { // Your code here int n1 = m - l + 1, n2 = r - m; int *arr1 = new int[n1]; int *arr2 = new int[n2]; // mảng phụ for(int i = 0; i < n1; i++) arr1[i] = arr[l + i]; for(int i = 0; i < n2; i++) arr2[i] = arr[m + i + 1]; // trộn 2 dãy tăng dần int k = l, i = 0, j = 0; while(i < n1 && j < n2) { if(arr1[i] <= arr2[j]) arr[k++] = arr1[i++]; else arr[k++] = arr2[j++]; } // sao chép phần còn lại while(i < n1) arr[k++] = arr1[i++]; while(j < n2) arr[k++] = arr2[j++]; delete []arr1; delete []arr2; } void mergeSort(int arr[], int l, int r) { //code here if(l < r) { int m = l + ((r - l)/2); mergeSort(arr, l, m); mergeSort(arr, m + 1 , r); merge(arr, l, m, r); } } void partSort(vector<int> &arr, int n, int l, int r) { int *a = new int[n]; if (l>r) swap(l,r); // dữ liệu có trường hợp l >= r // sao chép ra mảng phụ - vì hàm sắp xếp là trên mảng for(int i = l;i <= r; i++) a[i-l] = arr[i]; // sắp xếp mergeSort(a, 0, r - l); // sao chép ngược lại mảng ban đầu for(int i = l;i <= r; i++) arr[i] = a[i-l]; delete []a; } }; //{ Driver Code Starts. int main() { ios_base::sync_with_stdio(0); cin.tie(NULL); cout.tie(NULL); int t; cin >> t; while (t--) { int n; cin >> n; vector<int> arr(n); for(int i = 0; i < n; i++) cin >> arr[i]; int l, r; cin >> l >> r; Solution ob; ob.partSort(arr, n, l, r); for(int i = 0; i < n; i++) cout << arr[i] << " "; cout << "\n"; } return 0; } // } Driver Code Ends
Editor is loading...