21xrx.com
2025-06-24 15:43:29 Tuesday
登录
文章检索 我的文章 写文章
C++归并排序:实现代码及原理分析
2023-07-12 14:08:45 深夜i     28     0
C++ 归并排序 实现代码 原理分析

归并排序是一种经典的排序算法,可以实现高效的排序功能。在C++中,实现归并排序算法相对容易,这篇文章将介绍归并排序的实现代码及原理分析。

1.原理分析

归并排序的基本思想是将待排序的元素分成两个部分,先对这两个部分分别进行排序,然后将它们合并成一个有序序列。所以,归并排序可以分为两个基本步骤:

(1)分:将待排序序列递归地分成两个子序列,直到每个子序列只有一个元素。

(2)治:递归合并相邻的子序列,生成一个新的有序序列,重复上述过程,直到有序序列长度为n。

2.实现代码

归并排序的实现代码如下:

void merge(int arr[], int l, int m, int r)
{
  int i, j, k;
  int n1 = m - l + 1;
  int n2 = r - m;
  int L[n1], R[n2];
  for (i = 0; i < n1; i++)
    L[i] = arr[l + i];
  for (j = 0; j < n2; j++)
    R[j] = arr[m + 1+ j];
  i = 0;
  j = 0;
  k = l;
  while (i < n1 && j < n2)
  {
    if (L[i] <= R[j])
    {
      arr[k] = L[i];
      i++;
    }
    else
    {
      arr[k] = R[j];
      j++;
    }
    k++;
  }
  while (i < n1)
  {
    arr[k] = L[i];
    i++;
    k++;
  }
  while (j < n2)
  {
    arr[k] = R[j];
    j++;
    k++;
  }
}
void mergeSort(int arr[], int l, int r)
{
  if (l < r)
  {
    int m = l+(r-l)/2;
    mergeSort(arr, l, m);
    mergeSort(arr, m+1, r);
    merge(arr, l, m, r);
  }
}

在这个代码中,merge()函数用来合并有序的数组,mergeSort()函数则是采用分治的思想将待排序的数组不断地分成两份,直到每份只有一个元素。再将这两份有序的数组合并成一个有序序列,最后得到一个完全有序的序列。

总结:归并排序是一种经典的排序算法,这种算法思路比较简单,是一种十分有效的排序方式。在C++中,实现其代码也相对比较容易,大家可以根据上述的实现代码和原理,轻松实现自己需要的归并排序程序。

  
  

评论区