Advertisement
skfazleerabby

Merge Sort

Jan 26th, 2020
365
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.32 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void merge(int leftArr[], int rightArr[], int mainArray[], int leftLength, int rightLength){
  5.     int leftIndex, rightIndex, mainIndex;
  6.     leftIndex = rightIndex = mainIndex = 0;
  7.     while(leftIndex < leftLength && rightIndex < rightLength){
  8.         if(leftArr[leftIndex] < rightArr[rightIndex]){
  9.             mainArray[mainIndex] = leftArr[leftIndex];
  10.             leftIndex++;
  11.         }
  12.         else{
  13.             mainArray[mainIndex] = rightArr[rightIndex];
  14.             rightIndex++;
  15.         }
  16.         mainIndex++;
  17.     }
  18.  
  19.     while(leftIndex < leftLength){
  20.         mainArray[mainIndex] = leftArr[leftIndex];
  21.         mainIndex++;
  22.         leftIndex++;
  23.     }
  24.  
  25.     while(rightIndex < rightLength){
  26.         mainArray[mainIndex] = rightArr[rightIndex];
  27.         mainIndex++;
  28.         rightIndex++;
  29.     }
  30.     printf("\nMerge:\n");
  31.     printArr(mainArray, leftLength+rightLength);
  32.     printf("\n");
  33. }
  34.  
  35. void mergeSort(int mainArr[], int mainArrLength){
  36.     int index = 0;
  37.     if(mainArrLength < 2){
  38.         return;
  39.     }
  40.     int midIndex = mainArrLength/2;
  41.     int* leftArr = (int*)malloc(midIndex * sizeof(int));
  42.     int* rightArr = (int*)malloc((mainArrLength - midIndex) * sizeof(int));
  43.     for(index=0; index<midIndex; index++){
  44.         leftArr[index] = mainArr[index];
  45.     }
  46.     printf("Left Array: \n");
  47.     printArr(leftArr,midIndex);
  48.     for(index=midIndex; index < mainArrLength; index++){
  49.         rightArr[index - midIndex] = mainArr[index];
  50.     }
  51.     printf("Right Array: \n");
  52.     printArr(rightArr, midIndex);
  53.     mergeSort(leftArr, midIndex);
  54.     mergeSort(rightArr, mainArrLength - midIndex);
  55.     merge(leftArr, rightArr, mainArr, midIndex, mainArrLength - midIndex);
  56.     return;
  57. }
  58.  
  59. void printArr(int ArrToPrint[], int lengthArr){
  60.     int index;
  61.     for(index=0; index<lengthArr; index++){
  62.         printf("%d ",ArrToPrint[index]);
  63.     }
  64.     printf("\n");
  65. }
  66.  
  67. int main()
  68. {
  69.     int mainArr[] = {2, 4, 1, 6, 8, 5, 3, 7};
  70.     int index = 0;
  71.     int lengthArr = sizeof(mainArr)/sizeof(mainArr[0]);
  72.     printf("Before Sorting: \n");
  73.     printArr(mainArr, lengthArr);
  74.     printf("====================== Sorting Begins =====================\n\n");
  75.     mergeSort(mainArr, lengthArr);
  76.     printf("After Sorting: \n");
  77.     printArr(mainArr, lengthArr);
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement