归并排序:利用数组排序
递归将数组分为单个后,再合并
void merge_sort(int *s,int *reg,int l,int r){
if(l>=r) return;
else{
int mid = (l+r)/2;
int start1 =l;
int end1 = mid;
int start2 = mid+1;
int end2 = r;
merge_sort(s, reg, start1, end1);
merge_sort(s, reg, start2, end2);
int k = start1;
while(start1<=end1&&start2<=end2){
if(s[start1]<s[start2]){
reg[k] = s[start1];
start1++;
}
else{
reg[k] = s[start2];
start2++;
}
k++;
}
while(start1<=end1){
reg[k] = s[start1];
k++;
start1++;
}
while(start2<=end2){
reg[k] = s[start2];
k++;
start2++;
}
for(k = l; k <= r; k++)
s[k] = reg[k];
}
}