归并排序--c语言实现

/*************************************************************************
    > File Name: merge_sort.c
    > Author:qusijun
    > Mail: wiilen.lian@gmail.com 
    > Created Time: 2013年11月09日 星期六 12时29分03秒
 ************************************************************************/

#include<stdio.h>

int auxi_array[100] = {0};
int to_sort[10] = {9,2,1,5,10,3,8,2,5,1};


void merge(int *a,int *b,int left,int mid,int right)
{
    int s1 = left;
    int e1 = mid;
    int s2 = mid+1;
    int e2 = right;
    int k = left;
    
    while(s1<=e1&&s2<=e2)
    {
        if (a[s1]<a[s2])
            b[k++]  =a[s1++];
        else
            b[k++] = a[s2++];

    }

    while (s1<=mid)
    {
        b[k++] = a[s1++];
    }
    while(s2<=left)
    {
        b[k++] = a[s2++];
    }
    k--;
    while (k>=left)
    {
        a[k] = b[k];
        k--;
    }
}

void merge_sort(int *a,int *b,int left,int right)
{
    if (left<right)
    {

        int mid = (left+right)/2;
    
        merge_sort(a,b,left,mid);
        merge_sort(a,b,mid+1,right);
        merge(a,b,left,mid,right);
    
    }
  //  return;

}


int main()
{
    int i;
    for (i=0;i<10;i++)
    {
        printf("%d,",to_sort[i]);
    }
    merge_sort(to_sort,auxi_array,0,9);
    printf("
--------------------------merge_sort---------------------------
");
    for (i = 0;i<10;i++)
    {
        printf("%d,",to_sort[i]);
    }

    return 0;
}
原文地址:https://www.cnblogs.com/lianwl/p/3415676.html