21xrx.com
2025-03-23 19:25:58 Sunday
文章检索 我的文章 写文章
C++实现合并排序的从小到大排序算法代码
2023-06-22 01:12:24 深夜i     9     0
C++ 合并排序 从小到大 算法代码

合并排序是一种常用的排序算法,它采用了分治法的思想,将待排序序列不断拆分为两个子序列,直到每个子序列只有一个元素为止。然后将两个子序列合并成一个有序序列,最终得到一个完全有序的序列。以下是C++实现从小到大排序的合并排序算法代码。

#include <iostream>
using namespace std;
void Merge(int a[], int start, int mid, int end)
{
  int i, j, k;
  int temp[end-start+1];
  k = 0;
  i = start;
  j = mid + 1;
  while (i <= mid && j <= end)
  {
    if(a[i] <= a[j])
      temp[k++] = a[i++];
    else
      temp[k++] = a[j++];
  }
  while (i <= mid)
    temp[k++] = a[i++];
  while (j <= end)
    temp[k++] = a[j++];
  for(i = start; i <= end; i++)
    a[i] = temp[i-start];
}
void MergeSort(int a[], int start, int end)
{
  if(start == end)
    return;
  int mid = (start + end) / 2;
  MergeSort(a, start, mid);
  MergeSort(a, mid+1, end);
  Merge(a, start, mid, end);
}
int main()
{
  int a[] = 3;
  int length = sizeof(a) / sizeof(int);
  MergeSort(a, 0, length-1);
  for(int i = 0; i < length; i++)
    cout << a[i] << " ";
  cout << endl;
  return 0;
}

在这段代码中,`Merge`函数将两个已经排好序的子序列合并成一个更长的有序序列。参数`start`指向第一个子序列的开头,参数`mid`指向第二个子序列的开头,参数`end`指向第二个子序列的结尾。`temp`数组是用于临时存储合并后的序列,其中`k`是`temp`数组的索引,指示将下一个元素添加到`temp`的哪个位置。

`MergeSort`函数递归地分割原始数组为单个元素,然后调用`Merge`函数来合并子序列。最终排序完成后,我们将结果打印到控制台上。

总之,合并排序是一种可靠的排序算法,它在实践中被广泛应用。本文分享的C++代码实现了从小到大排序的合并排序算法,可以用作基础学习材料。

  
  

评论区

    相似文章