21xrx.com
2024-11-22 08:20:29 Friday
登录
文章检索 我的文章 写文章
C++合并排序算法代码
2023-07-06 04:18:39 深夜i     --     --
C++ 合并排序算法 代码

C++合并排序算法是一种基于分治思想的排序算法,也是常见的排序算法之一。它通过把一个大的问题分成若干个小的子问题,并且对每个子问题进行求解,最后将结果进行合并得到最终结果。以下是C++合并排序算法的代码:


void merge_sort(int arr[], int len) {

  if (len < 2) return;  // 如果数组长度小于2,直接返回

  // 1. divide

  int mid = len / 2;   // 将数组分为两部分

  int *left = new int[mid];

  int *right = new int[len - mid];

  for (int i = 0; i < mid; i++) {

    left[i] = arr[i];

  }

  for (int i = mid; i < len; i++) {

    right[i - mid] = arr[i];

  }

  // 2. conquer

  merge_sort(left, mid);    // 分别将左半部分和右半部分进行排序

  merge_sort(right, len - mid);

  // 3. merge

  int i = 0, j = 0, k = 0;

  while (i < mid && j < len - mid) {   // 将左半部分和右半部分进行合并

    if (left[i] < right[j]) {

      arr[k] = left[i];

      i++;

    }

    else {

      arr[k] = right[j];

      j++;

    }

    k++;

  }

  while (i < mid) {

    arr[k] = left[i];

    i++;

    k++;

  }

  while (j < len - mid) {

    arr[k] = right[j];

    j++;

    k++;

  }

  delete[] left;

  delete[] right;

}

上述代码实现了分治算法的三个步骤:分、治、合。

在分阶段,我们将原始数组分为两个部分,并递归地对这两部分进行排序。

在治阶段,我们对每个小数组进行排序。由于每个小数组长度小于 2,所以每个小数组的排序结果是有序的。

在合阶段,我们将排序好的小数组按顺序合并,并得到最终的排序结果。

总的来说,C++合并排序算法是一种快速而有效的排序算法,适用于大部分排序场景。它的时间复杂度为O(nlogn),并且比较稳定,不容易出现最坏情况。

  
  

评论区

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