21xrx.com
2024-11-10 00:50:39 Sunday
登录
文章检索 我的文章 写文章
C++实现合并排序的从小到大排序算法代码
2023-06-22 01:12:24 深夜i     --     --
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++代码实现了从小到大排序的合并排序算法,可以用作基础学习材料。

  
  

评论区

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