zoukankan      html  css  js  c++  java
  • 排序算法之归并排序(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;
    }
  • 相关阅读:
    网络流24题 餐巾计划(DCOJ8008)
    网络流24题 负载平衡(DCOJ8013)
    tyvj1982 武器分配
    bzoj1877 晨跑
    bzoj1834 网络扩容
    草地排水 改了又改(DCOJ6013)
    codevs1033 蚯蚓的游戏问题
    codevs1227 方格取数2
    bzoj1412 狼和羊的故事
    codevs1839 洞穴勘测
  • 原文地址:https://www.cnblogs.com/chmm/p/7428171.html
Copyright © 2011-2022 走看看