/*归并排序*/
//首先做一个两个有序数组合并的函数
//将有序数组a[]和b[]合并到c[]中
void MemeryArray(int a[], int n, int b[], int m, int c[])
{
int i, j, k;
i = j = k = 0;
while (i < n && j < m)
{
if (a[i] < b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
}
while (i < n)
c[k++] = a[i++];
while (j < m)
c[k++] = b[j++];
}//此函数仅作理解
//实际做一个函数合并a的前一半和后一半
void mergearray(int a[],int begin,int mid,int end,int temp[]){
//这里的end传入实际数组最大下标即n-1
int i=begin;
int j=mid+1;
int k=0;
while(i<=mid&&j<=end){
if(a[i]<=a[j]){
temp[k++]=a[i++];
}else{
temp[k++]=a[j++];
}
}
while(i<=mid){
temp[k++]=a[i++];
}
while(j<=end){
temp[k++]=a[j++];
}
for(i=0;i<k;i++){
a[begin+i]=temp[i];
}
}
void merge_sort(int arr[],int begin,int end,int temp[]){
if(begin<end){
int mid=(begin+end>>1);
merge_sort(arr,begin,mid,temp);
merge_sort(arr,mid+1,end,temp);
mergearray(arr,begin,mid,end,temp);
}
}
归并排序理解
最新推荐文章于 2024-07-14 13:39:50 发布