diff --git a/Merge_Sort.cpp b/Merge_Sort.cpp new file mode 100644 index 0000000..1a750ab --- /dev/null +++ b/Merge_Sort.cpp @@ -0,0 +1,70 @@ +#include +using namespace std; + +void merge(int arr[], int left, int mid, int right) { + int n1 = mid - left + 1; + int n2 = right - mid; + int* L = new int[n1]; + int* R = new int[n2]; + + for (int i = 0; i < n1; i++) + L[i] = arr[left + i]; + for (int j = 0; j < n2; j++) + R[j] = arr[mid + 1 + j]; + + int i = 0, j = 0, k = left; + while (i < n1 && j < n2) { + if (L[i] <= R[j]) { + arr[k] = L[i]; + i++; + } else { + arr[k] = R[j]; + j++; + } + k++; + } + + while (i < n1) { + arr[k] = L[i]; + i++; + k++; + } + + while (j < n2) { + arr[k] = R[j]; + j++; + k++; + } + + delete[] L; + delete[] R; +} + +void mergeSort(int arr[], int left, int right) { + if (left < right) { + int mid = left + (right - left) / 2; + mergeSort(arr, left, mid); + mergeSort(arr, mid + 1, right); + merge(arr, left, mid, right); + } +} + +void printArray(int arr[], int size) { + for (int i = 0; i < size; i++) + cout << arr[i] << " "; + cout << endl; +} + +int main() { + int arr[] = {38, 27, 43, 3, 9, 82, 10}; + int arrSize = sizeof(arr) / sizeof(arr[0]); + + cout << "Unsorted array: "; + printArray(arr, arrSize); + + mergeSort(arr, 0, arrSize - 1); + + cout << "Sorted array: "; + printArray(arr, arrSize); + return 0; +}