合并排序

来源:互联网 发布:大学软件专业课程 编辑:程序博客网 时间:2024/06/07 05:30
#include <stdio.h>#include <string.h>#include <iostream>#include <string>const int INF = 0x7fffffff;using namespace std;void merge(int *a, int l, int mid, int r) {int L[100];int R[100];int cnt = 0;for (int i = l; i <= mid; i++){L[cnt++] = a[i];}L[cnt] = INF;cnt = 0;for (int i = mid + 1; i <= r; i++){R[cnt++] = a[i];}R[cnt] = INF;int li = 0;int ri = 0;for (int i = l; i <= r; i++){if (L[li] < R[ri]){a[i] = L[li++];}else {a[i] = R[ri++];}}}void mergeSort(int *a, int l, int r){if (l < r){int mid = l + (r - l) / 2;mergeSort(a, l, mid);mergeSort(a, mid + 1, r);merge(a, l, mid, r);}}void print(int *a, int n){for (int i = 0; i < n; i++){printf("%d ", a[i]);}}int main(){int n;int a[100];scanf("%d", &n);for (int i = 0; i < n; i++) {scanf("%d", &a[i]);}mergeSort(a, 0, n - 1);print(a, n);return 0;}

0 0