归并排序
            
            
                    
                        标签:scanf   数列   free   ges   return   mergesort   efi   malloc   printf   
本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/94588321
归并排序的基本操作是将两个有序数组合并成一个有序数组,原理是运用分治思想,递归地将一个数组的左右两部分有序数列进行归并。
C语言实现:
 1 #include  2 #include  3 #define elementType int
 4 
 5 void mergeSort(elementType A[], int N);//N为数组大小,统一函数接口
 6 void mSort(elementType A[], elementType tmpA[], int L, int rightEnd);//传入左右边界
 7 void merge(elementType A[], elementType tmpA[], int L, int R, int rightEnd);//将有序的两个部分进行归并
 8 
 9 
10 int main()
11 {
12     int N;
13     scanf("%d", &N);
14     elementType* A = (elementType*)malloc(N * sizeof(elementType));
15     for (int i = 0; i )
16         scanf("%d", &A[i]);
17     mergeSort(A, N);
18     for (int i = 0; i )
19         printf("%d ", A[i]);
20     return 0;
21 }
22 
23 void mergeSort(elementType A[], int N) {
24     elementType* tmpA = (elementType*)malloc(N * sizeof(elementType));//申请内存建立临时数组
25     if (tmpA != NULL) {
26         mSort(A, tmpA, 0, N - 1);
27         free(tmpA);
28     }
29     else
30         printf("Error!\n");//内存申请失败
31 }
32 
33 void mSort(elementType A[], elementType tmpA[], int L, int rightEnd) {
34     if (L  rightEnd) {
35         int center = (L + rightEnd) / 2;
36         mSort(A, tmpA, L, center);
37         mSort(A, tmpA, center + 1, rightEnd);
38         merge(A, tmpA, L, center + 1, rightEnd);
39     }
40 }
41 
42 void merge(elementType A[], elementType tmpA[], int L, int R, int rightEnd) {
43     int tmpL = L,
44         leftEnd = R - 1,
45         elementNum = rightEnd - L + 1;
46     while (L  rightEnd) {
47         if (A[L]  A[R])
48             tmpA[tmpL++] = A[L++];
49         else 
50             tmpA[tmpL++] = A[R++];
51     }
52     while (L  leftEnd)
53         tmpA[tmpL++] = A[L++];
54     while (R  rightEnd)
55         tmpA[tmpL++] = A[R++];
56     for (int i = 0; i )
57         A[rightEnd] = tmpA[rightEnd];
58 }
 
 
归并排序
标签:scanf   数列   free   ges   return   mergesort   efi   malloc   printf   
原文地址:https://www.cnblogs.com/yinhao-ing/p/11128322.html
                    
             
            
            
            
            
                
                    文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
                    文章标题:
归并排序
                    文章链接:http://soscw.com/essay/30314.html                
 
            
                                
评论