【发布时间】:2021-05-21 08:36:45
【问题描述】:
我正在分析C 编程中的合并排序,我不明白算法的basic operation 是什么,我如何设置该基本步骤的recurrence relation(最佳情况)!?
我认为基本操作将是comparison step,它已被评论为基本操作。
如果是,那么我该如何设置和recurrence relation 进行该步骤?
#include <stdio.h>
// lets take a[5] = { 32, 45, 67, 2, 7 } as the array to be sorted.
// merge sort function
void mergeSort(int a[], int p, int r)
{
int q;
if (p < r)
{
q = (p + r) / 2;
mergeSort(a, p, q);
mergeSort(a, q + 1, r);
merge(a, p, q, r);
}
}
// function to merge the subarrays
void merge(int a[], int p, int q, int r)
{
int b[5]; //same size of a[]
int i, j, k;
k = 0;
i = p;
j = q + 1;
while (i <= q && j <= r)
{
if (a[i] < a[j]) //basic operation
{
b[k++] = a[i++]; // same as b[k]=a[i]; k++; i++;
}
else
{
b[k++] = a[j++];
}
}
while (i <= q)
{
b[k++] = a[i++];
}
while (j <= r)
{
b[k++] = a[j++];
}
for (i = r; i >= p; i--)
{
a[i] = b[--k]; // copying back the sorted list to a[]
}
}
【问题讨论】:
-
[style] 我将从使用更具描述性的标识符开始。
-
循环关系(不存在于您的片段中)是 1) 对左半部分进行排序 2) 对右半部分进行排序 3) 合并两半。您的代码仅包含 (3) [而且我认为其中有一些错误]
标签: c algorithm mergesort recurrence