递归实现归并排序

代码挺简单的,如下:

/*
    实现归并排序算法
*/

#include<iostream>

using namespace std;
int scope;

void merge(int arr[], int left, int mid, int right)
{
    int num_1=mid-left+1;
    int num_2 = right - mid;
    int temp_1[10001];
    int temp_2[10001];
    int i = 0;
    int j = 0;
    for (; i < num_1; i++)
    {
        temp_1[i] = arr[left + i];
    }
    for (; j < num_2; j++)
    {
        temp_2[j] = arr[mid + 1+j];
    }

    int k = left;
    i = 0;
    j = 0;
    while (i < num_1&&j < num_2)
    {
        if (temp_1[i] <= temp_2[j])
            arr[k++] = temp_1[i++];
        else
            arr[k++] = temp_2[j++];
    }
    
    while (i < num_1)
    {
        arr[k++] = temp_1[i++];
    }
    while (j < num_2)
    {
        arr[k++] = temp_2[j++];
    }
    

}

void mergeSort(int arr[], int left, int right)
{
    int mid;
    if (left < right)
    {
        mid = (left + right) / 2;
        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);
        merge(arr, left, mid, right);
    }

}

int main()
{
    
    int arr[10001];
    cout << "enter the scope of the array:";
    cin >> scope;

    cout << "enter " << scope << " element of the array:" << endl;
    for (int i = 0; i < scope; i++)
    {
        cin >> arr[i];
    }
    mergeSort(arr, 0, scope-1);
    for (int i = 0; i < scope; i++)
        cout << arr[i] << " ";
}
原文地址:https://www.cnblogs.com/romantic-Right/p/4892767.html