C/C++语言重温------排序之归并排序
#include<iostream>
using namespace std;
template <typename T, int N>
int getSize(T(&input)[N]) {
return sizeof(input) / sizeof(T);
}
int arr_length = 0;
void display_arr(int *arr)
{
for (int i = 0; i < arr_length; i++)
{
cout << "arr[" << i << "]:" << arr[i] << endl;
}
}
void merge_sort_recursive(int arr[], int arrCopy[], int start, int end) {
if (start >= end)
return;
int len = end - start, mid = (len >> 1) + start;
int leftStart = start, leftEnd = mid;
int rightStart = mid + 1, rightEnd = end;
merge_sort_recursive(arr, arrCopy, leftStart, leftEnd);
merge_sort_recursive(arr, arrCopy, rightStart, rightEnd);
int k = start;
while (leftStart <= leftEnd && rightStart <= rightEnd)
{
arrCopy[k++] = arr[leftStart] < arr[rightStart] ? arr[leftStart++] : arr[rightStart++];
}
while (leftStart <= leftEnd)
{
arrCopy[k++] = arr[leftStart++];
}
while (rightStart <= rightEnd)
{
arrCopy[k++] = arr[rightStart++];
}
for (k = start; k <= end; k++)
arr[k] = arrCopy[k];
}
void merge_sort(int arr[], const int len) {
int* arrCopy = (int*)malloc(len * sizeof(arr[0]));
merge_sort_recursive(arr, arrCopy, 0, len - 1);
}
int main(int argc, char const *argv[])
{
int arr[] = { 5, 6, 1, 9, 2, 4, 3, 7, 10, 8 };
arr_length = getSize(arr);
display_arr(arr);
merge_sort(arr, arr_length);
display_arr(arr);
return 0;
}