}
//处理剩下右边的元素
while(j <= high) { b[i] = arrays[j]; i++; j++; } //把辅助数组中的值赋值到原数组的原位置 for(int q = low;q <=high;q++) { arrays[q]=b[q]; } } //拆分 void MERGESORT(int low,int high) { if(low < high) { int mid = (low+high)/2; MERGESORT(low,mid); MERGESORT(mid+1,high); MERGE(low,mid,high); } } void printAll() { int k = sizeof(arrays) /sizeof(arrays[0]); for(int i = 0;i < k ; i++) { printf("%d ",arrays[i]); } } void main() { printf("before : \n"); printAll(); printf("\n"); int k = sizeof(arrays) /sizeof(arrays[0]); MERGESORT(0,k); printf("atfer : \n"); printAll();}
总结:
归并排序是先拆分,再合并。这样的好处是可以利用一个辅助数组,将排好序的数组,依次放入辅助数组,而不用移动元素。