首页 > 代码库 > 经典白话算法之归并排序
经典白话算法之归并排序
void Merge(int A[],int p,int q,int r){ int i,j,k; //计算子数组A[p..q]的元素个数 int n1 = q - p + 1; //计算子数组A[q+1..r]元素个数 int n2 = r - q; //创建子数组L,R int* L = (int*)malloc(sizeof(int)*(n1+1)); int* R = (int*)malloc(sizeof(int)*(n2+1)); //将子数组A[p..q]赋值到L数组 for(i = 0;i < n1;i++){ L[i] = A[p+i]; }//for //将子数组A[q+1..r]赋值到R数组 for(i = 0;i < n2;i++){ R[i] = A[q+1+i]; }//for //将哨兵置于数组末尾 L[n1] = INT_MAX; R[n2] = INT_MAX; //合并 i = 0;j = 0; for(k = p;k <= r;k++){ if(L[i] <= R[j]){ A[k] = L[i++]; }else{ A[k] = R[j++]; } }//for } void MergeSort(int A[],int p,int r){ //容错 if(p >= r){ return; } //分治 int mid = (r + p) / 2; //递归调用 MergeSort(A,p,mid); MergeSort(A,mid+1,r); //Cmbine Merge(A,p,mid,r); } 调用: int a[] = {1,3,5,7,8,2,3,5,6,9}; MergeSort(a,0,9);
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。