zoukankan      html  css  js  c++  java
  • 归并排序实现

    public void Merge(int[] a, int start, int mid, int end)
            {
                int[] tmp = new int[end - start + 1];    // tmp是汇总2个有序区的临时区域
                int i = start;            // 第1个有序区的索引
                int j = mid + 1;        // 第2个有序区的索引
                int k = 0;                // 临时区域的索引
    
                while (i <= mid && j <= end)
                {
                    if (a[i] <= a[j])
                    {
                        tmp[k++] = a[i++];
                    }
                    else
                    {
                        tmp[k++] = a[j++];
                    }
                }
    
                while (i <= mid)
                {
                    tmp[k++] = a[i++];
                }
    
                while (j <= end)
                {
                    tmp[k++] = a[j++];
                }
    
                // 将排序后的元素,全部都整合到数组a中。
                for (i = 0; i < k; i++)
                {
                    a[start + i] = tmp[i];
                }
    
                tmp = null;
            }
    
            public void MergeSort(int[] a, int start, int end)
            {
                if (a == null || start >= end)
                    return;
    
                int mid = (end + start) / 2;
                MergeSort(a, start, mid); // 递归排序a[start...mid]
                MergeSort(a, mid + 1, end); // 递归排序a[mid+1...end]
    
                // a[start...mid] 和 a[mid...end]是两个有序空间,
                // 将它们排序成一个有序空间a[start...end]
                Merge(a, start, mid, end);
            }

    归并排序(合并排序)的实现。使用分治法用递归来实现排序。

  • 相关阅读:
    问题 I: 夫子云游
    问题 H: 小k的简单问题
    问题 G: 圆桌上的晚餐
    问题 F: 超超的自闭意思
    promise与aysnc 与EventProxy
    node的实践(项目三)
    node的实践(项目二)
    node不懂的方法的使用
    github
    node的实践(项目一)
  • 原文地址:https://www.cnblogs.com/asenyang/p/6915411.html
Copyright © 2011-2022 走看看