zoukankan      html  css  js  c++  java
  • 2-路归并排序

    //两个有序子序列合并成一个子序列
    ElemType* B = (ElemType*)malloc((n + 1) * sizeof(ElemType));
    void Merge(ElemType A[], int low, int mid, int high) {
        int i, j;
        for (int k = low; k <= high; k++)
            B[k] = A[k];
        for (i = low, j = mid + 1, k = i; i <= mid && j <= high; k++) {
            if (B[i] < B[j])
                A[k] = B[i++];
            else
                A[k] = B[j++];
        }
        while (i <= mid) A[k++]=B[i++];
        while (j <= high) A[k++] = B[j++];
    }
    //2-路归并排序的递归算法
    void MSort(ElemType r1[], int low, int high, ElemType r3[]) {
        ElemType *r2;
        r2 = (ElemType*)malloc(sizeof(ElemType) * (high - low + 1));
        if (low == high)
            r3[low] = r1[low];
        else {
            mid = (low + high) / 2;
            MSort(r1, low, mid, r2);
            MSort(r1, mid + 1, high, r2);
            Merge(r2, low, mid, high, r3);
        }
        free(r2);
    }
    //2-路归并排序的初始调用过程
    void MergeSort(ElemType A[], int n) {
        MSort(A, 1, n, A);
    }
    努力的意义就是放眼望去以后都是喜欢的人和事......
  • 相关阅读:
    enum
    高可用复用类
    int 和 Integer 的区别
    MysqlMd5加密
    软件测试例子
    Wordcount
    大气登录页面
    生成二维码的JAVA
    多态的理解
    打印低头思故乡 java
  • 原文地址:https://www.cnblogs.com/Lorrained/p/15231221.html
Copyright © 2011-2022 走看看