zoukankan      html  css  js  c++  java
  • 排序算法-归并排序

    自底向下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace _010_归并排序
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] data = new int[] { 42, 20, 17, 27, 13, 8, 17, 48, 65 };
              
                mergeSort(data, 0, data.Length - 1);
                for (int i = 0; i < data.Length; i++)
                {
                    Console.Write(data[i] + " ");
                }
            }
    
            public static void mergearray(int[] arrayData,int low,int mid,int high)
            {
                 int[] aux = new int[high - low + 1];
                int i = low;//左指针
                int j = mid + 1;//右指针
                int k = 0;//临时数组指针
                //把较小的数先移动新数组中
                while (i<=mid && j<=high)
                {
                    if (arrayData[i] <= arrayData[j])
                    {
                        aux[k++] = arrayData[i++];
                    }
                    else
                    {
                        aux[k++] = arrayData[j++];
                    }
                }
                //把左边剩余的数移入数组
                while (i<=mid)
                {
                    aux[k++] = arrayData[i++];
                }
                //把右边边剩余的数移入数组
                while (j <= high)
                {
                    aux[k++] = arrayData[j++];
                }
                // 把新数组中的数覆盖原数组
                for (int t = 0; t < aux.Length; t++)
                {
                    arrayData[t+low] = aux[t];
                }
            }
            /// <summary>
            /// 自顶向下的归并排序
            /// </summary>
            /// <param name="arrayData"></param>
            /// <param name="low"></param>
            /// <param name="high"></param>
            public static void mergeSort(int[] arrayData,int low,int high)
            {
               
                if (low < high)
                {
                    int mid = low + (high - low) / 2;
                    //左边
                    mergeSort(arrayData, low, mid);
                    //右边
                    mergeSort(arrayData, mid+1,high);
                    //左右并归
                    mergearray(arrayData, low, mid, high);
                }
            }

    自底向上:

     /// <summary>
            /// 自底向上的归并排序
            /// </summary>
            /// <param name="arrayData"></param>
            /// <param name="low"></param>
            /// <param name="high"></param>
            public static void mergeSort_2(int[] arrayData, int low, int high)
            {
                int N = arrayData.Length;
                for (int i = 1; i < N;i=i+i)//增量的数组
                {
                    for (int j = 0; j < N-i; j+=i+i)//每个增量比较的次数
                    {
                        mergearray(arrayData,j,j+i-1,Math.Min(j+i+i-1,N-1));
                    }
                }
            }
  • 相关阅读:
    $.ajax()方法详解(转)
    ajax(异步页面动态刷新)
    二阶段项目总结
    (转)Java字符串转日期或日期转字符串
    (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
    Serblet 过滤器(Filter)
    延迟加载
    Junit测试错误:### Error building SqlSession
    MyEclipse下Junit报错"The input type of the launch configuration"
    mybatis逆向工程
  • 原文地址:https://www.cnblogs.com/rongweijun/p/8146527.html
Copyright © 2011-2022 走看看