#include <iostream>
using namespace std;
const int TEMP_SIZE = 1024;
int temp_buffer[TEMP_SIZE];
void print_array(int* array, int size)
{
for (int i=0; i<size; i++)
cout << array[i] << " ";
cout << endl;
}
void Merge(int* array, int start, int mid, int end);
void MergeSort(int* array, int start, int end)
{
if (start < end)
{
int mid = start + (end - start) / 2;
MergeSort(array, start, mid);
MergeSort(array, mid+1, end);
Merge(array, start, mid, end);
}
}
void Merge(int* array, int start, int mid, int end)
{
int i = start, j = mid+1;
int temp_idx = i;
while (i <= mid && j <= end)
{
if (array[i] < array[j])
{
temp_buffer[temp_idx] = array[i];
i++;
temp_idx++;
}
else
{
temp_buffer[temp_idx] = array[j];
j++;
temp_idx++;
}
}
while (i<=mid)
{
temp_buffer[temp_idx] = array[i];
i++;
temp_idx++;
}
while (j<=end)
{
temp_buffer[temp_idx] = array[j];
j++;
temp_idx++;
}
// copy back
memcpy(&array[start], &temp_buffer[start], sizeof(int) * (end-start+1));
}
int main()
{
int size;
int* array;
cin >> size;
array = new int[size];
for (int i=0; i<size; i++)
array[i] = rand()%100;
print_array(array, size);
MergeSort(array, 0, size-1);
print_array(array, size);
delete[] array;
return 1;
}
归并排序
最新推荐文章于 2023-12-11 10:45:47 发布