经典白话算法之归并排序
2014-05-03 09:43
267 查看
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);
相关文章推荐
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 【白话经典算法系列之九】 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 白话经典算法系列之九 从归并排序到数列的逆序数对(微软笔试题)
- 归并排序 白话经典(转载)
- 经典白话算法之桶排序
- 白话经典算法系列之六 快速排序 快速搞定 【转】
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之五 归并排序的实现
- (转) 白话经典算法系列之三 希尔排序的实现(附源代码实现)
- 白话经典算法系列之七 堆与堆排序
- 白话经典算法系列之六 快速排序 快速搞定
- 白话经典算法系列之七 堆与堆排序(改)