Untitled
unknown
plain_text
3 years ago
1.1 kB
11
Indexable
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;
}
public:
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);
}
}Editor is loading...