惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
美团技术团队
WordPress大学
WordPress大学
罗磊的独立博客
Last Week in AI
Last Week in AI
人人都是产品经理
人人都是产品经理
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
H
Hackread – Cybersecurity News, Data Breaches, AI and More
H
Help Net Security
S
SegmentFault 最新的问题
C
Check Point Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
腾讯CDC
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
F
Fortinet All Blogs
D
DataBreaches.Net
雷峰网
雷峰网
GbyAI
GbyAI
宝玉的分享
宝玉的分享

博客园 - gxc

C#2.0中的泛型约束(转载) 解决‘“System.Configuration.ConfigurationSettings.AppSettings”已过时’的警告 《雷神之锤III》里求平方根倒数的函数 回溯法(vc)百鸡百钱问题 回溯法(vc)八皇后问题 六十六条经典禅语 prototype.js和Ajax 悖论 标签的使用(2) 标签的使用(1) 自顶向下的归并排序 归并排序之归并算法 Josephus问题(循环链表) 找质数算法(Sieve of Eratosthenes筛法) 堆排序 直接选择排序 快速排序算法 Some of the new features from ASP.NET 2.0 在ASP.NET中使用AJAX
自底向上的归并排序
gxc · 2006-01-11 · via 博客园 - gxc

每个递归程序都有一个等价的非递归程序和它相对应,而计算的顺序相反。
既然自顶向下的归并排序是一个递归,那么也应该有一个自底向上的非递归算法和它相对应。
自底向上的归并排序对整个数组进行若干个m-m的归并排序,m的值从1开始每次变成原来的2倍。如果某次排序时,数组的长度刚好是m的倍数的话,那么该次排序的最后2个子数组对刚好大小是m和m,可以作m-m排序;否则只能作m-x排序,x比m要小。
        int min(int a, int b)
        {
            return (a>=b)?a:b;
        }
        void MergerSort(int[] a,int l,int r)
        {
            for (int m = 1; m <= r - l; m = m + m)
            {
                for (int i = l; i <= r - m; i = i + 2 * m)
                {
                    Merge(a, i, i + m - 1, min(i + 2 * m - 1, r));
                }
            }
        }