#include <iostream>
using namespace std;
const int MAXSIZE = 100;
typedef struct SQlist
{
int arr[MAXSIZE];
int Len;
} SQlist;
bool Init_SQlist(SQlist &space)
{
memset(space.arr, 0, sizeof(space.arr));
space.Len = 0;
return true;
}
bool EnSQlist(SQlist &space)
{
space.Len = 10;
for (int i = 0; i < space.Len; ++i)
{
space.arr[i] = rand() % 100;
}
return true;
}
bool Merge(SQlist &space, int left, int mid, int right)
{
int Length = (right - left) + 1;
int *pData = new int[Length];
memset(pData, 0, sizeof(int) * Length);
int low = left;
int hig = mid + 1;
int Index = 0;
while (low <= mid && hig <= right)
{
while (low <= mid && space.arr[low] <= space.arr[hig])
{
pData[Index++] = space.arr[low++];
}
while (hig <= right && space.arr[hig] < space.arr[low])
{
pData[Index++] = space.arr[hig++];
}
}
while (low <= mid)
{
pData[Index++] = space.arr[low++];
}
while (hig <= right)
{
pData[Index++] = space.arr[hig++];
}
memcpy(&space.arr[left], pData, sizeof(int) * Length);
return true;
}
bool Merger_sort(SQlist &space, int left, int right)
{
if (left >= right)
return true;
else
{
int mid = ((right - left) >> 1) + left;
Merger_sort(space, left, mid);
Merger_sort(space, mid + 1, right);
Merge(space, left, mid, right);
}
}
bool print(SQlist &space)
{
for (int i = 0; i < space.Len; ++i)
{
if (i == 0)
cout << space.arr[i];
else
cout << " " << space.arr[i];
}
cout << endl;
return true;
}
int main()
{
srand(time(NULL));
SQlist space;
Init_SQlist(space);
EnSQlist(space);
print(space);
Merger_sort(space, 0, space.Len - 1);
print(space);
cin.get();
return 0;
}