归并排序 --C语言实现

来源:互联网 发布:js分页思路 编辑:程序博客网 时间:2024/06/07 07:41
#include <cstdlib>#include <iostream>using namespace std;void merge(int A[], int p , int q, int r){     int n1 = q - p + 1;     int n2 = r - q;     int L[n1 + 2], R[n2 + 2];     for(int i = 1; i <= n1; i++){             L[i] = A[p + i - 1];              }     for(int i = 1; i <= n2; i++){             R[i] = A[q + i];              }     L[n1 + 1] = 9999999;     R[n2 + 1] = 9999999;     int i = 1;     int j = 1;     for(int k = p; k <= r; k++){             if(L[i] <= R[j]){                     A[k] = L[i];                     i++;             }             else {                  A[k] = R[j];                  j++;             }     }}void merge_sort(int A[], int p, int r){     if(p < r){          int q = (p + r) / 2;          merge_sort(A, p, q);          merge_sort(A, q + 1, r);          merge(A, p, q, r);     }}int main(int argc, char *argv[]){      int a[] = {0, 10, 12, 13, 33, 5, 44, 25, 8, 99, 77, 11};    for(int i = 1; i < 12; i++){            printf("%d ", a[i]);            if(i == 11)                 printf("\n");    }    merge_sort(a, 1, 11);    for(int i = 1; i < 12; i++){            printf("%d ", a[i]);            if(i == 11)                 printf("\n");    }    system("PAUSE");    return EXIT_SUCCESS;}
原创粉丝点击