归并排序模板
mergeSort是归并排序,merge负责将两组数组合并
需要注意的是,在新的数组往a里面赋值的过程中,不一定是从0开始赋值的嗷。因为在归并中两个数组占位连续的,真实的起始位置是l1(因为中途变了,要有一个变量标记)
while里面别忘了l1,l2++

#include<stdio.h> #include<string.h> #include<iostream> using namespace std; void merge(int a[],int l1,int r1,int l2,int r2) { int temp[1000]; int num=0; int start=l1; while(l1<=r1 && l2<=r2) { if(a[l1]<=a[l2]) temp[num++]=a[l1++]; else temp[num++]=a[l2++]; } while(l1<=r1) temp[num++]=a[l1++]; while(l2<=r2) temp[num++]=a[l2++]; for(int i=0;i<num;i++) a[start+i]=temp[i]; } void mergeSort(int a[],int left,int right) { if(left==right) return; int mid=(left+right)/2; if(left==right) return; mergeSort(a,left,mid); mergeSort(a,mid+1,right); merge(a,left,mid,mid+1,right); } int main() { int a[10]={66,12,33,57,64,27,18}; mergeSort(a,0,6); for(int i=0;i<=6;i++) printf("%d ",a[i]); return 0; }