zoukankan      html  css  js  c++  java
  • 归并排序——算法系列

    归并排序:

    主要思想是,将一列无序数,无限分组,直至分成单个元素,然后归并,因为归并前,两组数据都已经有序,所以复杂度要小。

    代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace Test
    {
        class Program
        {
            static void Main(string[] args)
            {
                int[] array = { 3, 1, 2, 9, 7, 8, 6 };
                Console.WriteLine("排序前:" + string.Join(",", array));
                MergeSort(array, new int[array.Length], 0, array.Length - 1);
                Console.WriteLine("排序后:" + string.Join(",", array));
                Console.ReadLine();
            }
    
            static void MergeSort(int[] array, int[] temparray, int left, int right)
            {
                if (left < right)
                {
                    int middle = (left + right) / 2;
                    MergeSort(array, temparray, left, middle);
                    MergeSort(array, temparray, middle + 1, right);
                    Merge(array, temparray, left, middle + 1, right);
                }
            }
    
            static void Merge(int[] array, int[] temparray, int left, int middle, int right)
            {
                int leftEnd = middle - 1;
                int rightStart = middle;
                int tempIndex = left;
                int tempLength = right - left + 1;
                while (left <= leftEnd && rightStart <= right)
                {
                    if (array[left] < array[rightStart])
                        temparray[tempIndex++] = array[left++];
                    else
                        temparray[tempIndex++] = array[rightStart++];
                }
                while (left <= leftEnd)
                    temparray[tempIndex++] = array[left++];
                while (rightStart <= right)
                    temparray[tempIndex++] = array[rightStart++];
                for (int i = 0; i < tempLength; i++)
                {
                    array[right] = temparray[right];
                    right--;
                }
            }
        }
    }

    总结:这个归并排序还是要重新看下,没有怎么理解到其中的精髓。

  • 相关阅读:
    C# Bitmap类型与Byte[]类型相互转化
    我所理解的JavaScript闭包
    从零开始编写自己的C#框架 ---- 系列文章
    巧用Windows 7计划任务设置定时提醒
    vba中MsgBox的参数及用法
    SQL行转列和列转行
    web应用程序 ---- 日志系统的设计
    《代码整洁之道》读书笔记
    使用Excel制作万年历(日历可A4纸打印)
    C#窗体全屏功能
  • 原文地址:https://www.cnblogs.com/7ants/p/2960586.html
Copyright © 2011-2022 走看看