Advertisement
AaronThomsen

Merge Sort

May 10th, 2018
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.31 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. void mergeSort(int arr[], int size);
  6. void mergeSort(int arr[], int leftIndex, int rightIndex);
  7. void mergeSortMerge(int arr[], int l, int m, int r);
  8.  
  9. int main(){
  10.     int arr[10] = {15, 6, 8, -1, 0, 23, 1, 42, 32, 44};
  11.  
  12.     mergeSort(arr, 10);
  13.  
  14.     for(auto i : arr)
  15.         cout << i << " ";
  16. }
  17.  
  18. void mergeSort(int arr[], int size){
  19.     mergeSort(arr, 0, size - 1);
  20. }
  21.  
  22. void mergeSort(int arr[], int leftIndex, int rightIndex){
  23.     if(leftIndex < rightIndex){
  24.         int middle = (leftIndex + rightIndex) / 2;
  25.  
  26.         mergeSort(arr, leftIndex, middle);
  27.         mergeSort(arr, middle + 1, rightIndex);
  28.         mergeSortMerge(arr, leftIndex, middle, rightIndex);
  29.     }
  30. }
  31.  
  32. void mergeSortMerge(int arr[], int l, int m, int r){
  33.     //arr1: l to m
  34.     //arr2: m + 1 to r
  35.     int* arr1 = new int[m - l + 1],
  36.         *arr2 = new int[r - m];
  37.  
  38.  
  39.     for(int i = 0; i < m - l + 1; i++){
  40.         arr1[i] = arr[i + l];
  41.         arr2[i] = arr[i + m + 1];
  42.     }
  43.  
  44.     int f = 0, s = 0, i = l;
  45.  
  46.     while(f < m - l + 1 && s < r - m){
  47.         arr[i++] = arr1[f] < arr2[s] ? arr1[f++] : arr2[s++];
  48.     }
  49.  
  50.     while(f < m - l + 1){
  51.         arr[i++] = arr1[f++];
  52.     }
  53.  
  54.     while(s < r - m){
  55.         arr[i++] = arr2[s++];
  56.     }
  57.  
  58.     delete[] arr1;
  59.     delete[] arr2;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement