数据结构 递归排序

这是第一次看完算法导论递归排序后自己用C语言写的,基本上是照着书上的思路写一遍

void merge(int arr[], int p, int q, int r)
{
 int *a1 = (int*)malloc(sizeof(int)*(q - p + 2)), *a2 = (int*)malloc(sizeof(int)*(r - q+1));
 for (int i = 0; i < q - p + 1; i++)
  a1[i] = arr[p + i];
 for (int i = 0; i < r - q; i++)
  a2[i] = arr[q + 1 + i];
 a1[q- p + 1] = 100;
 a2[r - q] = 100;
 int count = p,i=0,j=0;
 while (count<=r)
 {
  if (a1[i] <= a2[j])
   arr[count++] = a1[i++];
  else
   arr[count++] = a2[j++];
 }
}
void mergesort(int arr[], int p, int q)
{
 if (p == q)
  return;
 mergesort(arr, p, (p + q) / 2);
 mergesort(arr, (p + q) / 2 + 1, q);
 merge(arr, p, (p + q) / 2, q);
}

这是第二遍看完后,按照自己的思路写的,代码看起来更简洁一点

void merge(int arr[], int p, int q)
{
 int mid = (p + q) / 2;
 vector<int> a1, a2;
 for (int i = p; i <= mid; i++)
  a1.push_back(arr[i]);
 for (int i = mid + 1; i <= q; i++)
  a2.push_back(arr[i]);
 a1.push_back(INT_MAX);
 a2.push_back(INT_MAX);
 int n = p;
 auto p1 = a1.begin(), p2 = a2.begin();
 while (n<=q)
 {
  if (*p1 <= *p2)
   arr[n++] = *p1++;
  else
   arr[n++] = *p2++;
 }
}
void mergesort(int arr[], int p, int q)
{
 if (p >= q) return;
 int mid = (p + q) / 2;
 mergesort(arr, p, mid);
 mergesort(arr, mid + 1, q);
 merge(arr, p, q);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值