归并排序算法的实现和理解
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; }