合并两个有序数组并排序:
int *combination(int *a,int n1,int *b,int n2){
int *c=new int[n1+n2];
int i=0;
int j=0;
int count=0;
while((i<n1)&&(j<n2)){
if(a[i]<b[j]){
c[count++]=a[i++];
}
else{
c[count++]=b[j++];
}
}
if(count<n1+n2-1){
while(i<n1){
c[count++]=a[i++];
}
while(j<n2){
c[count++]=b[j++];
}
}
return c;
}
合并一个数组内的两个分别有序部分,无返回。
void merge(int *a,int i,int j,int k){
int *c=new int[k-i+1];
int p=i;
int q=j+1;
int count=0;
while((p<=j)&&(q<=k)){
if(a[p]<a[q]){
c[count++]=a[p++];
}
else{
c[count++]=a[q++];
}
}
if(count<k-i+1){
while(p<=j){
c[count++]=a[p++];
}
while(q<=k){
c[count++]=a[q++];
}
}
int m=0;
while(m<k-i+1){
a[i+m]=c[m];
++m;
}
}
归并排序:二分法,分别对两边排序,再合并。
void merge_sort(int *a,int start,int end){
if(end!=start){
int middle=(start+end)/2;
merge_sort(a,start,middle);
merge_sort(a,middle+1,end);
merge(a,start,middle,end);
}
else{
return;
}
}