先递归分解序列,再合并有序数列
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
#define random(x) (rand()%x)
void merge_array(int nums[], int first, int mid, int last, int temp[])
{
int index1 = first, index2 = mid + 1, index = 0;
while(index1 <= mid && index2 <= last)
{
if(nums[index1] <= nums[index2])
temp[index++] = nums[index1++];
else
temp[index++] = nums[index2++];
}
while(index1 <= mid)
temp[index++] = nums[index1++];
while(index2 <= last)
temp[index++] = nums[index2++];
for(int i = 0; i < index; i++)
nums[first + i] = temp[i];
}
void merge_sort_recursively(int nums[], int first, int last, int temp[])
{
if(first < last)
{
int mid = (first + last) / 2;
merge_sort_recursively(nums, first, mid, temp);
merge_sort_recursively(nums, mid + 1, last, temp);
merge_array(nums, first, mid, last, temp);
}
}
bool merge_sort(int nums[], int length)
{
int *p = new int[length];
if(p == NULL) return false;
merge_sort_recursively(nums, 0, length - 1, p);
delete p;
return true;
}
void print_num(int nums[], int length)
{
for(int i = 1; i < length; i++)
cout << nums[i] << ' ';
cout << endl;
}
int main()
{
int nums[10] = {0};
for(int i = 0; i < 10; i++)
{
int num = random(10);
nums[i] = num;
}
print_num(nums, 10);
merge_sort(nums, 10);
print_num(nums, 10);
return 0;
}