首页 > 编程语言 >C#实现MergeSort算法

C#实现MergeSort算法

时间:2024-07-24 23:41:11浏览次数:14  
标签:MergeSort C# double Length ++ 算法 result sortedB sortedA

public class MergeSortLearn
{
    /// <summary>
    /// 分治递归
    /// </summary>
    /// <param name="oriArray"></param>
    /// <returns></returns>
    public static double[] MergeSort(double[] oriArray)
    {
        //基本条件
        if (oriArray.Length <= 1)
        {
            return oriArray;
        }
        int halfSize = oriArray.Length / 2;
        double[] preHalf = oriArray.Take(halfSize).ToArray();
        double[] afterHalf = oriArray.Skip(halfSize).Take(oriArray.Length - halfSize).ToArray();
        double[] sortedPreHalf = MergeSort(preHalf);
        double[] sortedAfterHalf = MergeSort(afterHalf);
        return Merge(sortedPreHalf,sortedAfterHalf);
    }
    /// <summary>
    /// 合并两个有序数组
    /// </summary>
    /// <param name="sortedA"></param>
    /// <param name="sortedB"></param>
    /// <returns></returns>
    public static double[] Merge(double[] sortedA, double[] sortedB)
    {
        double[] result = new double[sortedA.Length + sortedB.Length];
        int i = 0, j = 0;
        for(int k = 0; k < result.Length; k++)
        {
            if (j == sortedB.Length)
            {
                result[k] = sortedA[i];
                i++;
                continue;
            }
            if (i == sortedA.Length)
            {
                result[k] = sortedB[j];
                j++;
                continue;
            }
            if ( sortedA[i] < sortedB[j])
            {
                result[k] = sortedA[i];
                i++;
            }
            else 
            {
                result[k] = sortedB[j];
                j++;
            }
        }
        return result;
    }
}

标签:MergeSort,C#,double,Length,++,算法,result,sortedB,sortedA
From: https://www.cnblogs.com/johnyang/p/18322019

相关文章

  • Linux Kernel Utilization Clamping简介
    随着linux内核调度技术的不断演进,目前存在多个调度类(stop、deadline、rt、cfs、idle)以满足不同性质和要求的任务(task)的调度需求。对于用户空间来说,完全公平调度器(CFS)和实时调度器(RT)是绝大多数任务所使用的,但是基于POSIXPriority算法不足以支撑关于选核和调频的调度器特性。关于任......
  • 每天5分钟复习OpenStack(十四)Bcache技术<2>
    Bcache是Linux内核块设备层Cache,支持将一个或多个快速设备(如SSDNVME)作为一个或多个慢速设备(SATAHDD)的缓存设备.阅读本文章你将学会:sgdisk分区工具使用。Bcache添加、删除缓存盘和数据盘。Bcache状态的查询。Bcache的缓存替换策略。Bcache的缓存模式。部署环境说......
  • Enhancing Diffusion Models with Reinforcement Learning
    EnhancingDiffusionModelswithReinforcementLearningSep27,2023 | UncategorizedTL;DRTodaywe'regoingtotellyouallabout DRLX -ourlibraryforDiffusionReinforcementLearning!Releasedafewweeksago,DRLXisalibraryforscalabledist......
  • OD C卷 - 数据单元的变量替换
    数据单元的变量替换(100)输入描述:输入一行数据,用逗号分割每个单元格,尾部没有逗号,最多26个单元格,对应编号A-Z;每个单元格内容:字母、数字、<>单元格引用,如aCd<A>8u引用单元格A;输入不存在循环引用,一个单元格只能引用一个其他的单元格;输出描述:输出所有单元格展开的内容,单元格......
  • [题解]CF958C3 Encryption (hard)
    思路先考虑\(\Theta(n^2k)\)的暴力DP。定义\(dp_{i,j}\)表示在前\(i\)个数中选取\(j\)个的最小和,转移显然:\[dp_{i,j}=\min_{1\leqk<i}\{dp_{k,j-1}+s_{k+1,i}\bmodp\}\]注意到一个性质:\(dp_{i,j}\equivs_i\pmodp\)。因为前者是前\(i\)项分为若干......
  • docker介绍、安装
    Docker是什么Docker是一个开源应用容器引擎Docker是完全使用沙箱机制(类似iPhone的app)Docker容器性能开销极低Docker能干什么用于Web应用的自动化打包和发布在服务器部署应用类似于在沙箱中运行应用linux系统中能做的,都可以做到Docker架构镜像:自我理解为类似于一个......
  • C语言:数组
    hello,大家好今天我们来讲解c语言中数组的知识。一、数组的概念数组是⼀组相同类型元素的集合;数组中存放的是1个或者多个数据,但是数组元素个数不能为0。数组中存放的多个数据,类型是相同的。数组分为一维数组和多维数组,多维数组一般比较多见的是二维数组。二、一维数组 1......
  • 双向链表<数据结构 C版>
    目录关于链表的分类 双向链表结构体初始化尾插头插打印判断是否为空尾删头删查找指定位置之后的插入指定位置的删除销毁关于链表的分类根据链表的三大特性,单向or双向、带头or不带头、循环or不循环,可将链表分为2*2*2,8种链表,前面我们已经实现了单链表,即:不带头......
  • C++语法10:C++实现0-1背包问题的动态规划解法
    动态规划(DynamicProgramming):解锁复杂问题的钥匙在算法设计与分析的广阔领域中,动态规划(DynamicProgramming,DP)无疑是一把锋利的剑,用于斩断复杂问题中缠绕的荆棘。它通过将大问题分解为小问题,并存储子问题的解来避免重复计算,从而高效地解决了一系列看似无解的难题。本文将从......
  • Cargo镜像源
    在Windows系统默认为:%USERPROFILE%.cargo,在类Unix系统默认为:$HOME/.cargo,在此目录下新建config.toml文件,填写内容如下:字节镜像源[source.crates-io]replace-with='rsproxy-sparse'[source.rsproxy]registry="https://rsproxy.cn/crates.io-index"#稀疏索......