当前位置: 首页 > 编程笔记 >

C#排序算法之归并排序

都博裕
2023-03-14
本文向大家介绍C#排序算法之归并排序,包括了C#排序算法之归并排序的使用技巧和注意事项,需要的朋友参考一下

本文实例为大家分享了C#实现归并排序具体代码,供大家参考,具体内容如下

代码:

//归并排序(目标数组,子表的起始位置,子表的终止位置)
  private static void MergeSortFunction(int[] array, int first, int last)
  {
   try
   {
    if (first < last) //子表的长度大于1,则进入下面的递归处理
    {
     int mid = (first + last) / 2; //子表划分的位置
     MergeSortFunction(array, first, mid); //对划分出来的左侧子表进行递归划分
     MergeSortFunction(array, mid + 1, last); //对划分出来的右侧子表进行递归划分
     MergeSortCore(array, first, mid, last); //对左右子表进行有序的整合(归并排序的核心部分)
    }
   }
   catch (Exception ex)
   { }
  }
 
  //归并排序的核心部分:将两个有序的左右子表(以mid区分),合并成一个有序的表
  private static void MergeSortCore(int[] array, int first, int mid, int last)
  {
   try
   {
    int indexA = first; //左侧子表的起始位置
    int indexB = mid + 1; //右侧子表的起始位置
    int[] temp = new int[last + 1]; //声明数组(暂存左右子表的所有有序数列):长度等于左右子表的长度之和。
    int tempIndex = 0;
    while (indexA <= mid && indexB <= last) //进行左右子表的遍历,如果其中有一个子表遍历完,则跳出循环
    {
     if (array[indexA] <= array[indexB]) //此时左子表的数 <= 右子表的数
     {
      temp[tempIndex++] = array[indexA++]; //将左子表的数放入暂存数组中,遍历左子表下标++
     }
     else//此时左子表的数 > 右子表的数
     {
      temp[tempIndex++] = array[indexB++]; //将右子表的数放入暂存数组中,遍历右子表下标++
     }
    }
    //有一侧子表遍历完后,跳出循环,将另外一侧子表剩下的数一次放入暂存数组中(有序)
    while (indexA <= mid)
    {
     temp[tempIndex++] = array[indexA++];
    }
    while (indexB <= last)
    {
     temp[tempIndex++] = array[indexB++];
    }
 
    //将暂存数组中有序的数列写入目标数组的制定位置,使进行归并的数组段有序
    tempIndex = 0;
    for (int i = first; i <= last; i++)
    {
     array[i] = temp[tempIndex++];
    }
   }
   catch (Exception ex)
   { }
  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍C#递归算法之归并排序,包括了C#递归算法之归并排序的使用技巧和注意事项,需要的朋友参考一下 归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为: 1)划分子表 2)合并半子表 首先我们来讨论归并算法,归并算法将一系列数据放到一个向量中,索引范围为[first,

  • 主要内容:归并排序算法的具体实现归并排序算法是在 分治算法基础上设计出来的一种排序算法,它可以对指定序列完成升序(由小到大)或降序(由大到小)排序,对应的时间复杂度为 。 归并排序算法实现排序的思路是: 将整个待排序序列划分成多个不可再分的子序列,每个子序列中仅有 1 个元素; 所有的子序列进行两两合并,合并过程中完成排序操作,最终合并得到的新序列就是有序序列。 举个简单的例子,使用归并排序算法对 {7, 5, 2, 4, 1,

  • 归并排序 归并排序是建立在归并操作上的一种有效的排序算法。该算法是分治法的一个非常典型的应用。归并排是一种稳定的排序方法。将已有序列的子序列合并 .把长度为n的输入序列分成两个长度为n/2的子序列; .对这两个子序列分别采用归并排序; .将两个排序好的子序列合并成一个最终的排序序列。 function mergeSort(arr) { //采用自上而下的递归方法 var len = ar

  • 本文向大家介绍Java经典排序算法之归并排序详解,包括了Java经典排序算法之归并排序详解的使用技巧和注意事项,需要的朋友参考一下 一、归并排序 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归

  • 本文向大家介绍Java排序算法之归并排序简单实现,包括了Java排序算法之归并排序简单实现的使用技巧和注意事项,需要的朋友参考一下 算法描述:对于给定的一组记录,首先将每两个相邻的长度为1的子序列进行归并,得到 n/2(向上取整)个长度为2或1的有序子序列,再将其两两归并,反复执行此过程,直到得到一个有序序列。 运行结果看一下: 总结 以上就是本文关于Java排序算法之归并排序简单实现的全部内容,

  • 本文向大家介绍PHP排序算法系列之归并排序详解,包括了PHP排序算法系列之归并排序详解的使用技巧和注意事项,需要的朋友参考一下 归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有