21xrx.com
2024-11-25 03:12:05 Monday
登录
文章检索 我的文章 写文章
C++归并排序:实现代码及原理分析
2023-07-12 14:08:45 深夜i     --     --
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++中,实现其代码也相对比较容易,大家可以根据上述的实现代码和原理,轻松实现自己需要的归并排序程序。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复