一、归并排序思路
大体思路就是将数据在中位数的位置分成两个区间,一直重复,直到最后节点只有一个数
二、程序
#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; }