#include <stdio.h> #include <memory.h> #include <algorithm> using namespace std; #define MAX_N 10 void merge_sort(int seq[], int len); // 打印数组 void my_print(int seq[], int len) { for (int i = 0; i < len; i++) printf("%d\n", seq[i]); } int main() { int arr[] = {9, 8, 7, 6, 1, 3, 2, 4, 5, 0}; merge_sort(arr, MAX_N); my_print(arr, MAX_N); return 0; } // 归并 void merge(int seq[], int s1[], int l1, int s2[], int l2) { int i = 0, j = 0, k = 0; while(i < l1 && j < l2) { if (s1[i] < s2[j]) seq[k++] = s1[i++]; else seq[k++] = s2[j++]; } while (i < l1) seq[k++] = s1[i++]; while (j < l2) seq[k++] = s2[j++]; } // 分治递归 void merge_sort_rec(int seq[], int len) { if (len < 4) { sort(seq, seq+len); // 不复杂化了,主要体现以下分治算法和合并排序 } else { int l1 = len / 2, l2 = len - l1; int *pSeq1 = new int[l1]; int *pSeq2 = new int[l2]; memcpy(pSeq1, seq, sizeof(int)*l1); memcpy(pSeq2, seq+l1, sizeof(int)*l2); merge_sort_rec(pSeq1, l1); // 分治 merge_sort_rec(pSeq2, l2); // 分治 merge(seq, pSeq1, l1, pSeq2, l2); // 合并 delete[] pSeq1; delete[] pSeq2; } } //合并排序对外接口 void merge_sort(int seq[], int len) { merge_sort_rec(seq, len); }