#include <stdio.h>
#include <stdlib.h>
//合并有序数组
void mergeArray(int *a,int first,int mid,int last,int *temp){
int i=first;
int j=mid+1;
int m=mid;int n=last;
int k=0;
while(i<=m && j<=n){
if(a[i]<=a[j])
temp[k++]=a[i++];
else
temp[k++]=a[j++];
}
while(i<=m)
temp[k++]=a[i++];
while(j<=n)
temp[k++]=a[j++];
for(i=0;i<k;i++){
a[first+i]=temp[i];
}
}
//递归调用
void mergeSort(int *a,int first,int last,int *temp){
if(first<last){
int mid=(first+last)/2;
mergeSort(a,first,mid,temp);
mergeSort(a,mid+1,last,temp);
mergeArray(a,first,mid,last,temp);
}
}
void main(){
int a[8]={10,3,3,20,8,9,30,4};
int *temp=new int[10];
int first=0;
int last=7;
mergeSort(a,first,last,temp);
for(int i=0;i<=last;i++){
printf("%d,",a[i]);
}
}
#include <stdlib.h>
//合并有序数组
void mergeArray(int *a,int first,int mid,int last,int *temp){
int i=first;
int j=mid+1;
int m=mid;int n=last;
int k=0;
while(i<=m && j<=n){
if(a[i]<=a[j])
temp[k++]=a[i++];
else
temp[k++]=a[j++];
}
while(i<=m)
temp[k++]=a[i++];
while(j<=n)
temp[k++]=a[j++];
for(i=0;i<k;i++){
a[first+i]=temp[i];
}
}
//递归调用
void mergeSort(int *a,int first,int last,int *temp){
if(first<last){
int mid=(first+last)/2;
mergeSort(a,first,mid,temp);
mergeSort(a,mid+1,last,temp);
mergeArray(a,first,mid,last,temp);
}
}
void main(){
int a[8]={10,3,3,20,8,9,30,4};
int *temp=new int[10];
int first=0;
int last=7;
mergeSort(a,first,last,temp);
for(int i=0;i<=last;i++){
printf("%d,",a[i]);
}
}