排序算法积累(4)-------归并排序

一、归并排序思路

  大体思路就是将数据在中位数的位置分成两个区间,一直重复,直到最后节点只有一个数

  

二、程序

  

#include <iostream>  
#include <iomanip>  
#include <string>
//用setprecision(n)设置精度,其中n表示精确到小数点后n位  

using namespace std;
 
void merge(int arr[], int l, int m, int r) {  //归并
    int *help = new int[r - l + 1];
    int i = 0;
    int p1 = l;
    int p2 = m + 1;
    while (p1 <= m && p2 <= r) {
        help[i++] = arr[p1] < arr[p2] ? arr[p1++] : arr[p2++];
    }
    while (p1 <= m) {
        help[i++] = arr[p1++];
    }
    while (p2 <= r) {
        help[i++] = arr[p2++];
    }
    help[i] = NULL;
    for (i = 0; help[i]!=NULL; i++) {
        arr[l + i] = help[i];
    }
}
void mergeSort(int arr[], int l, int r) { //分类
    if (l == r) {
        return;
    }
    int mid = l + ((r - l) >> 1);
    mergeSort(arr, l, mid);
    mergeSort(arr, mid + 1, r);
    merge(arr, l, mid, r);
}

void mergeSort(int arr[],int size) {   //合并上面两个函数
    if (arr == NULL || size < 2) {
        return;
    }
    mergeSort(arr, 0, size - 1);
}

int main()
{
    int array[9] = { 5, 4, 9, 6, 3, 8, 5, 4, 2 };
    mergeSort(array, 9);          //调用
    for (int i = 0; i < 9; i++)
    {
        cout << array[i] << ' ';
    }
    return 0;
}
原文地址:https://www.cnblogs.com/panlangen/p/7890077.html