归并排序

来源:互联网 发布:淘宝银泰百货是真是假 编辑:程序博客网 时间:2024/05/18 17:59

归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

 

#include <cstdio>void merge_sort(int *A, int x,int y,int *B) {    if(y-x > 1) {    int m = x +(y - x) / 2;    int p = x, q = m, i = x;    merge_sort(A, x, m, B);    merge_sort(A, m, y, B);    while(p < m || q < y) { if(q >= y || (p < m && A[p] <= A[q]))            B[i++] = A[p++];        else B[i++] = A[q++];    }    for(i = x; i < y; i++) A[i] = B[i];    }}int main() {    int n;    int A[100], B[100];    scanf("%d", &n);    for(int i = 0; i < n; i++) scanf("%d", &A[i]);    merge_sort(A, 0, n, B);    for(int i = 0; i < n; i++) printf("%d", A[i]);    return 0;}
#include void merge_sort(int *A, int low, int mid, int high, int *B) {int i =low;int j = mid + 1;int k = low;while(i <= mid && j <= high)if(A[i] <= A[j])B[k++] = A[i++];else B[k++] = A[j++];while(i <= mid)B[k++] = A[i++];while(j <= high)B[k++] = A[j++];for(k = low; k <= high; k++)A[k] = B[k];}void mergesort(int *A,int low, int high, int *B) {if(low < high) {int mid = (low + high) / 2;mergesort(A, low, mid, B);mergesort(A, mid+1, high, B);merge_sort(A, low, mid, high, B);}}int main() {int n;int A[100], B[100];scanf("%d", &n);for(int i = 1; i <= n; i++)scanf("%d", &A[i]);mergesort(A, 1, n, B);for(int i = 1; i <= n; i++)printf("%d ", A[i]);return 0;}

0 0
原创粉丝点击