Advertisement
Mazamin

merge_sort

Oct 2nd, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.38 KB | None | 0 0
  1. /*
  2.  * File:   main.c
  3.  * Author: Gerardo Cicalese
  4.  *
  5.  * Created on 16 settembre 2019, 15.48
  6.  */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10.  
  11. void print_vex(int * vex, int len){
  12.     if(len<1)
  13.         return;
  14.     printf("%d ", *vex);
  15.     print_vex(vex+1, len-1);
  16. }
  17.  
  18. void copy_vex(int * a, int * b, int len){
  19.     if(len==0)
  20.         return;
  21.     *b=*a;
  22.     copy_vex(a+1, b+1, len-1);
  23. }
  24.  
  25. void merge(int * a, int lena, int * b, int lenb, int * temp){
  26.     if(lena>0&&lenb>0)
  27.         if(*a<*b){
  28.             *temp=*a;
  29.             merge(a+1, lena-1, b, lenb, temp+1);
  30.         }
  31.         else{
  32.             *temp=*b;
  33.             merge(a, lena, b+1, lenb-1, temp+1);
  34.         }
  35.     else{
  36.         if(lena==0&&lenb>0){
  37.             *temp=*b;
  38.             merge(a, lena, b+1, lenb-1, temp+1);
  39.         }
  40.         else if(lena>0&&lenb==0){
  41.             *temp=*a;
  42.             merge(a+1, lena-1, b, lenb, temp+1);
  43.         }
  44.     }
  45. }
  46.  
  47. void merge_sort(int * array, int len, int * temp){
  48.     if( len < 2 )
  49.         return;
  50.    
  51.     int pivot=len/2;
  52.    
  53.     merge_sort(array, pivot, temp);
  54.     merge_sort(array+pivot, len-pivot, temp);
  55.  
  56.     merge(array, pivot, array+pivot, len-pivot, temp);
  57.     copy_vex(temp, array, len);
  58. }
  59.  
  60. int main(void){
  61.     int array[10]={23, 62, 15, 97, 35, 78, 34, 89, 13, 57}, temp[10];
  62.     merge_sort(array, 10, temp);
  63.     print_vex(array, 10);
  64.     return 0;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement