diff --git a/C++/Merge Sort.cpp b/C++/Merge Sort.cpp new file mode 100644 index 0000000..4fe0cf1 --- /dev/null +++ b/C++/Merge Sort.cpp @@ -0,0 +1,68 @@ +#include +#include + +void merge(std::vector& arr, int left, int mid, int right) { + int n1 = mid - left + 1; + int n2 = right - mid; + + std::vector left_half(n1); + std::vector right_half(n2); + + for (int i = 0; i < n1; i++) { + left_half[i] = arr[left + i]; + } + for (int j = 0; j < n2; j++) { + right_half[j] = arr[mid + 1 + j]; + } + + int i = 0, j = 0, k = left; + + while (i < n1 && j < n2) { + if (left_half[i] <= right_half[j]) { + arr[k] = left_half[i]; + i++; + } else { + arr[k] = right_half[j]; + j++; + } + k++; + } + + while (i < n1) { + arr[k] = left_half[i]; + i++; + k++; + } + + while (j < n2) { + arr[k] = right_half[j]; + j++; + k++; + } +} + +void mergeSort(std::vector& 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); + } +} + +int main() { + std::vector arr = {12, 11, 13, 5, 6, 7}; + int n = arr.size(); + + mergeSort(arr, 0, n - 1); + + std::cout << "Sorted array: "; + for (int i = 0; i < n; i++) { + std::cout << arr[i] << " "; + } + std::cout << std::endl; + + return 0; +}