• 排序算法之归并排序(Merge Sort)


    基本思想

      归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

    代码实现

    #include<iostream>
    using namespace std;
    
    void MergeArray(int Array[], int First, int Middle, int Last, int P[])
    {
        int i = First, j = Middle + 1;
        int m = Middle, n = Last;
        int k = 0;
    
        while (i <= m&&j <= n)
        {
            if (Array[i] <= Array[j])
            {
                P[k] = Array[i];
                ++k; ++i;
            }
            else
            {
                P[k] = Array[j];
                ++k; ++j;
            }
        }
    
        while (i <= m)//若后一个表被取空
        {
            P[k] = Array[i];
            ++k; ++i;
        }
    
        while (j <= n)//若前一个表被取空
        {
            P[k] = Array[j];
            ++k; ++j;
        }
    
        for (int i = 0; i <k; i++)
        {
            Array[First + i] = P[i];
        }
    }
    
    
    void MergeSort(int Array[], int First, int Last, int P[])
    {
        if (First < Last)
        {
            int mid = (First + Last) / 2;
            MergeSort(Array, First, mid, P);
            MergeSort(Array, mid + 1, Last, P);
            MergeArray(Array, First, mid, Last, P);
        }
    }
    
    int main()
    {
    
        int MyData[10] = { 12,13,16,22,9,14,15,20,23,24 };
        int *Result = new int[10];//存储排序结果
        MergeSort(MyData, 0, 9, Result);
        delete[] Result;
    
        for (int i = 0; i < 10; i++)
        {
            cout << MyData[i] << " ";
        }
        cout << endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    每天删除和创建表
    一种直接取数的建表语句
    正则替换函数regexp_replace()
    将同个id对应的多行数据,转为一行数组类型数据。使用collect_set() group by函数
    根据客户端标识加载不同的css文件
    配置npm镜像
    解决方案
    oracle virtualbox设置asm虚拟硬盘
    scala基础
    excel合并sheet内容
  • 原文地址:https://www.cnblogs.com/chmm/p/7428171.html
Copyright © 2020-2023  润新知