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

推荐订阅源

H
Hackread – Cybersecurity News, Data Breaches, AI and More
U
Unit 42
Vercel News
Vercel News
Martin Fowler
Martin Fowler
云风的 BLOG
云风的 BLOG
爱范儿
爱范儿
MongoDB | Blog
MongoDB | Blog
J
Java Code Geeks
F
Fortinet All Blogs
MyScale Blog
MyScale Blog
C
Check Point Blog
N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
aimingoo的专栏
aimingoo的专栏
博客园_首页
WordPress大学
WordPress大学
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
IT之家
IT之家
Last Week in AI
Last Week in AI
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
Jina AI
Jina AI
V
Visual Studio Blog
小众软件
小众软件

博客园 - 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));
                }
            }
        }