Untitled
unknown
plain_text
2 years ago
2.2 kB
14
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 EndsEditor is loading...