归并排序往往以递归的形式实现,如果面试官要求你实现一个迭代版本,又该如何实现呢?
首先给出常见的递归版本:
<span style="font-family:Times New Roman;font-size:14px;">static void merge(int a[], int left, int mid, int right, int temp[])
{
int i = left, j = mid+1, k = 0;
while(i <= mid && j <= right)
{
if(a[i] <= a[j])
temp[k++] = a[i++];
else
temp[k++] = a[j++];
}
while(i <= mid)
temp[k++] = a[i++];
while(j <= right)
temp[k++] = a[j++];
for(int idx = 0; idx < k; idx++)
a[idx+left] = temp[idx];
}
static void mergeSort2(int ar[], int left, int right, int temp[])
{
if(left < right)
{
int mid =