经典白话算法之归并排序

简介:



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);


目录
相关文章
|
4月前
|
搜索推荐 算法 Python
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
如何实现归并排序算法? 要求:编写一个Python函数,输入一个无序列表,返回排序后的列表。
|
19天前
|
搜索推荐 算法
【数据结构】八大排序之归并排序算法
【数据结构】八大排序之归并排序算法
20 5
|
1月前
|
机器学习/深度学习 算法 搜索推荐
数据结构与算法(Java篇)笔记--归并排序
数据结构与算法(Java篇)笔记--归并排序
|
1月前
|
搜索推荐 算法 Python
python实现归并排序算法。
【2月更文挑战第9天】【2月更文挑战第24篇】python实现归并排序算法。
|
2月前
|
存储 搜索推荐 算法
【数据结构排序算法篇】----归并排序【实战演练】
【数据结构排序算法篇】----归并排序【实战演练】
27 0
|
2月前
|
搜索推荐
排序算法之七:归并排序(非递归)
排序算法之七:归并排序(非递归)
排序算法之七:归并排序(非递归)
|
2月前
|
搜索推荐 C++
【非递归版】归并排序算法(2)
【非递归版】归并排序算法(2)
20 0
|
2月前
|
搜索推荐 算法 C++
【递归版】归并排序算法(1)
【递归版】归并排序算法(1)
22 0
|
3月前
|
搜索推荐 算法
排序算法——归并排序(递归与非递归)
排序算法——归并排序(递归与非递归)
|
3月前
|
搜索推荐
排序算法(归并排序)
讲述了归并排序思想
15 0