归并排序

论坛 期权论坛 脚本     
匿名技术用户   2020-12-30 07:31   11   0

#include<iostream> 
using namespace std;
void merge(int a[], int left, int mid, int right)
{
 int i = left;
 int j = mid + 1;
 int *temp = new int[right - left + 1];
 int t = 0;
 while (i <= mid && j <= right)
 {
  if (a[i] <= a[j])
   temp[t++] = a[i++];
  else
   temp[t++] = a[j++];
 }
 while (i <= mid)
  temp[t++] = a[i++];
 while (j <= right)
  temp[t++] = a[j++];
    t = 0;
 for (int i = left; i <= right; i++, t++)
  a[i] = temp[t];
}
void mergesort(int a[], int left, int right)
{
 if (left<right)
 {
  int mid = (left + right) / 2;
  mergesort(a, left, mid);
  mergesort(a, mid + 1, right);
  merge(a, left, mid, right);
 }
}
int main()
{
 int n, a[100];
 cin >> n;
 for (int i = 0; i<n; i++)
  cin >> a[i];
 mergesort(a, 0, n - 1);
 for (int i = 0; i<n; i++)
  cout << a[i] << " ";
 return 0;
}

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP