当前位置:首页 > 科技  > 软件

聊聊C#归并排序算法

来源: 责编: 时间:2023-10-10 18:32:19 407观看
导读前言归并排序是一种常见的排序算法,它采用分治法的思想,在排序过程中不断将待排序序列分割成更小的子序列,直到每个子序列中只剩下一个元素,然后将这些子序列两两合并排序,最终得到一个有序的序列。归并排序实现原理将待排

前言

归并排序是一种常见的排序算法,它采用分治法的思想,在排序过程中不断将待排序序列分割成更小的子序列,直到每个子序列中只剩下一个元素,然后将这些子序列两两合并排序,最终得到一个有序的序列。Ua028资讯网——每日最新资讯28at.com

归并排序实现原理

  1. 将待排序序列分割成两个子序列,直到每个子序列中只有一个元素。
  2. 将相邻的两个子序列合并,并按照大小顺序合并为一个新的有序序列。
  3. 不断重复第2步,直到所有子序列都合并为一个有序序列。

归并排序代码实现

public static void MergeSort(int[] arr, int left, int right)        {            if (left < right)            {                // 计算中间索引                int mid = (left + right) / 2;                // 对左半部分数组进行归并排序                MergeSort(arr, left, mid);                // 对右半部分数组进行归并排序                MergeSort(arr, mid + 1, right);                // 合并两个有序数组                Merge(arr, left, mid, right);            }        }        public static void Merge(int[] arr, int left, int mid, int right)        {            int n1 = mid - left + 1; // 左半部分数组的长度            int n2 = right - mid;    // 右半部分数组的长度            // 创建临时数组            int[] leftArr = new int[n1];            int[] rightArr = new int[n2];            // 将数据拷贝到临时数组            for (int i = 0; i < n1; ++i)            {                leftArr[i] = arr[left + i];            }            for (int j = 0; j < n2; ++j)            {                rightArr[j] = arr[mid + 1 + j];            }            // 合并两个有序数组            int k = left;   // 初始化合并后的数组索引            int p = 0;      // 初始化左半部分数组的索引            int q = 0;      // 初始化右半部分数组的索引            while (p < n1 && q < n2)            {                if (leftArr[p] <= rightArr[q])                {                    arr[k] = leftArr[p];                    p++;                }                else                {                    arr[k] = rightArr[q];                    q++;                }                k++;            }            // 复制左半部分数组的剩余元素            while (p < n1)            {                arr[k] = leftArr[p];                p++;                k++;            }            // 复制右半部分数组的剩余元素            while (q < n2)            {                arr[k] = rightArr[q];                q++;                k++;            }        }        public static void MergeSortRun()        {            int[] array = { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3 };            Console.WriteLine("排序前数组:" + string.Join(", ", array));            MergeSort(array, 0, array.Length - 1);            Console.WriteLine("排序后数组:" + string.Join(", ", array));        }

运行结果

图片图片Ua028资讯网——每日最新资讯28at.com

总结

归并排序是一种高效稳定的排序算法,时间复杂度为O(nlogn)。它的核心思想是将待排序序列分割成更小的子序列,然后逐步合并并排序这些子序列,最终得到一个有序序列。归并排序需要额外的空间来存储临时数组,但由于其分治的特性,适用于对链表和外部存储的排序。Ua028资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-12750-0.html聊聊C#归并排序算法

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Go 语言中 panic 和 recover 搭配使用

下一篇: 深入了解归并排序:原理、性能分析与 Java 实现

标签:
  • 热门焦点
  • 影音体验是真的强 简单聊聊iQOO Pad

    大公司的好处就是产品线丰富,非常细分化的东西也能给你做出来,例如早先我们看到了新的vivo Pad2,之后我们又在iQOO Neo8 Pro的发布会上看到了iQOO的首款平板产品iQOO Pad。虽
  • 《英雄联盟》夏季赛总决赛今日开打!JDG对阵LNG首发名单来了 Knight:准备三连冠

    8月5日消息,今日17:00,《英雄联盟》2023LPL夏季赛总决赛将正式开打,由JDG对阵LNG。对两支队伍来说,这场比赛不仅要争夺夏季赛冠军,更要决定谁才是LPL赛区一
  • 掘力计划第 20 期:Flutter 混合开发的混乱之治

    在掘力计划系列活动第20场,《Flutter 开发实战详解》作者,掘金优秀作者,Github GSY 系列目负责人恋猫的小郭分享了Flutter 混合开发的混乱之治。Flutter 基于自研的 Skia 引擎
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 使用LLM插件从命令行访问Llama 2

    最近的一个大新闻是Meta AI推出了新的开源授权的大型语言模型Llama 2。这是一项非常重要的进展:Llama 2可免费用于研究和商业用途。(几小时前,swyy发现它已从LLaMA 2更名为Lla
  • 三分钟白话RocketMQ系列—— 如何发送消息

    我们知道RocketMQ主要分为消息 生产、存储(消息堆积)、消费 三大块领域。那接下来,我们白话一下,RocketMQ是如何发送消息的,揭秘消息生产全过程。注意,如果白话中不小心提到相关代
  • 每天一道面试题-CPU伪共享

    前言:了不起:又到了每天一到面试题的时候了!学弟,最近学习的怎么样啊 了不起学弟:最近学习的还不错,每天都在学习,每天都在进步! 了不起:那你最近学习的什么呢? 了不起学弟:最近在学习C
  • 电视息屏休眠仍有网络上传 爱奇艺被质疑“薅消费者羊毛”

    记者丨宁晓敏 见习生丨汗青出品丨鳌头财经(theSankei) 前不久,爱奇艺发布了一份亮眼的一季报,不仅营收和会员营收创造历史最佳表现,其运营利润也连续6个月实现增长。自去年年初
  • 三翼鸟智能家居亮相电博会,让用户体验更真实

    2021电博会在青岛国际会展中心开幕中,三翼鸟直接把“家”搬到了现场,成为了展会的一大看点。这也是三翼鸟继9月9日发布了行业首个一站式定制智慧家平台后的
Top