Untitled

 avatar
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...