加入收藏 | 设为首页 | 会员中心 | 我要投稿 焦作站长网 (https://www.0391zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 安全 > 正文

算法系列15天速成 第三天 七大经典排序【下】

发布时间:2020-03-14 19:09:15 所属栏目:安全 来源:站长网
导读:今天跟大家聊聊最后三种排序: 直接插入排序,希尔排序和归并排序

namespace MergeSort
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = { 3, 2, 1, 8, 9, 0 };

MergeSort(array, new int[array.Length], 0, array.Length - 1);

Console.WriteLine(string.Join(",", array));
        }

///<summary>
/// 数组的划分
///</summary>
///<param>待排序数组</param>
///<param>临时存放数组</param>
///<param>序列段的开始位置,</param>
///<param>序列段的结束位置</param>
        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);
            }
        }

///<summary>
/// 数组的两两合并操作
///</summary>
///<param>待排序数组</param>
///<param>临时数组</param>
///<param>第一个区间段开始位置</param>
///<param>第二个区间的开始位置</param>
///<param>第二个区间段结束位置</param>
        static void Merge(int[] array, int[] temparray, int left, int middle, int right)
        {
            //左指针尾
            int leftEnd = middle - 1;

//右指针头
            int rightStart = middle;

//临时数组的下标
            int tempIndex = left;

//数组合并后的length长度
            int tempLength = right - left + 1;

//先循环两个区间段都没有结束的情况
            while ((left <= leftEnd) && (rightStart <= right))
            {
                //如果发现有序列大,则将此数放入临时数组
                if (array[left] < array[rightStart])
                    temparray[tempIndex++] = array[left++];
                else
                    temparray[tempIndex++] = array[rightStart++];
            }

(编辑:焦作站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读