// MergeSort--------迭代法.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <algorithm>
#include <time.h>
using namespace std;
int flag = 0;
void Merge(int* low,int* mid,int*& h,int*high,int* max)
{
while ((low <= mid) && (high <= max))
{
if (*low > *high)
*h++ = *high++;
else
*h++ = *low++;
}
while (low <= mid)
*h++ = *low++;
while (high <= max)
*h++ = *high++;
}
void MergeSort(int*& b,int n,int size)
{
int* q = new int[size];
int count = 0;
int num = 0;
while (num < size-2 * n)
{
Merge(b + count * 2 * n, b + count * 2 * n + n - 1, q, b + count * 2 * n + n, b + count * 2 * n + 2 * n - 1);
count++;
num += 2 * n;
}
if (num < size)
{
q -= num;
for (int i = 0; i < count * 2 * n; i++)
b[i] = q[i];
q += num;
if (flag == 1)
{
q = q - num;
Merge(b, b + count * 2 * n - 1, q, b + count * 2 * n, b + size - 1);
}
if (flag == 0)
Merge(b + count * 2 * n, b + count * 2 * n + n - 1, q, b + count * 2 * n + n, b + size - 1);
}
q -= size;
for (int i = 0; i < size; i++)
b[i] = q[i];
delete[] q;
}
void print(int i)
{
cout << i << " ";
}
int _tmain(int argc, _TCHAR* argv[])
{
srand((unsigned int)time(NULL));
int* a = new int[10];
for (int i = 0; i < 10; i++)
{
a[i] = rand()%100;
}
int len = 10;
for (int i = 1; i <= len / 2; i *= 2)
{
if (2 * i > len/2)
flag = 1;
MergeSort(a, i, len);
for (int i = 0; i < 10; i++)
cout << a[i] << " ";
cout << endl;
}
return 0;
}
非递归的 MergeSort
最新推荐文章于 2022-04-23 20:20:33 发布