归并排序算法

归并排序算法的实现和理解

MergeSort.c文件如下:

#include "MergeSort.h"
#include <stdlib.h>
#include <string.h> //memcpy的头文件

void Merge(int R[],int low, int mid, int high)//合并函数
{
    int* R1;
    int i,j,k;
    k = 0;
    i = low;
    j = mid+1;
    R1 = (int*)malloc((high-low+1)*sizeof(int));
    while(i<=mid && j<=high)
    {
        if(R[i]<=R[j])
        {
            R1[k]=R[i];
            i++;k++;
        }
        else
        {
            R1[k]=R[j];
            j++;k++;
        }
    }
    while(i<=mid)
    {
        R1[k]=R[i];
        i++;k++;      
    }
    while(j<=high)
    {
        R1[k]=R[j];
        j++;k++;      
    }
/*  for(k=0,i=low;i<=high;k++,i++)//能不能用memcpy代替,效率会更高
        R[i]=R1[k];
*/    
    memcpy(R+low, R1, (high-low+1)*sizeof(int));//memcpy(&R[low], R1, (high-low+1)*sizeof(int));

    free(R1);
}

void MergeSort(int R[], int b, int e)
{
    if(b < e)
    {
        int m = (b + e)/2;
        MergeSort(R, b, m);
        MergeSort(R, m+1, e);
        Merge(R, b, m, e);
    }
}

MergeSort.h文件如下:

#ifndef _MERGESORT_H_
#define _MERGESORT_H_

void MergeSort(int R[], int b, int e);

#endif //_MERGESORT_H_

Test.c文件如下:

#include <stdio.h>
#include "MergeSort.h"

int main()
{
    int i;
    int nArray[10]={1, 3, 2, 9, 4, 7, 8, 10, 6, 5};
    MergeSort(nArray, 0, sizeof(nArray)/sizeof(*nArray)-1);//后两个参数一个表示首下标,一个表示尾下标

    for(i=0;i<10;i++)
        printf("%d ",nArray[i]);
    printf("\n");
    return 0;
}
原文地址:https://www.cnblogs.com/wufengv5/p/3084424.html