zoukankan      html  css  js  c++  java
  • 分治法排序

    /*
    分治排序法的思想:
    简单引入两副已排好序的扑克牌,假设最上面的最小。则只需每次比较两副牌的最上面那一张的大小,
    永远取最小的,直到取完两副牌为止。
    为了方便,在两副牌的最后加入一张哨兵牌,值取为∞。
    */
    
    #include<iostream>
    #define INF 100000
    
    using namespace std;
    
    //合并
    void merge(int a[], int l, int q, int r)
    {
        int n1 = q - l + 1, n2 = r - q, *L, *R, i, j;
        L = new int[n1 + 1];
        R = new int[n2 + 1];
        for (i = 0; i < n1; i++)L[i] = a[l + i];
        for (i = 0; i < n2; i++)R[i] = a[q + i + 1];
        L[n1] = INF;
        R[n2] = INF;
        i = 0;
        j = 0;
        for (int k = l; k <= r; k++)
        {
            if (L[i] < R[j])
            {
                a[k] = L[i];
                i++;
            }
            else
            {
                a[k] = R[j];
                j++;
            }
        }
        delete[] L;
        delete[] R;
    }
    
    //分解
    void merge_sort(int a[], int l, int r)
    {
        if (l < r)
        {
            int q = (l + r) >> 1;
    
            merge_sort(a, l, q);
            merge_sort(a, q + 1, r);
            merge(a, l, q, r);
        }
    }
    
    int main()
    {
        int a[5] = { 5, 4, 3, 2, 1 };
    
        merge_sort(a, 0, 4);
    
        cout << "合并排序后数组为:
    ";
        for (int i = 0; i < 5; i++)
            cout << a[i] << " ";
    
        system("pause");
        return 0;
    }
    世上无难事,只要肯登攀。
  • 相关阅读:
    spark streaming 整合kafka(二)
    JAVA设计模式之动态代理
    使用org.apache.commons.cli包来设计JAVA命令行工具
    HTML教程
    Java InputStream和Reader
    Java IO
    程序员怎么把自己的招牌打出去?
    Java设计模式之单例模式
    JAVA NIO
    Java文件流字节流和字符流的区别
  • 原文地址:https://www.cnblogs.com/littlehoom/p/3515481.html
Copyright © 2011-2022 走看看