zoukankan      html  css  js  c++  java
  • 归并排序

     1 #include <stdio.h>
     2 #include <malloc.h>
     3 
     4 typedef int ElementType;
     5 
     6 void _Merge(ElementType *Array,ElementType *TmpArray,int LeftStart,int RightStart,int RightEnd)
     7 {
     8     int i;
     9     int ArrayLen = RightEnd - LeftStart + 1;
    10     int LeftEnd = RightStart - 1;
    11     int TmpArrayEnd = LeftStart;
    12     
    13     while(LeftStart <= LeftEnd && RightStart <= RightEnd)
    14     {
    15         if(Array[LeftStart] <= Array[RightStart])
    16         {
    17             TmpArray[TmpArrayEnd++] = Array[LeftStart++];
    18         }
    19         else
    20         {
    21             TmpArray[TmpArrayEnd++] = Array[RightStart++];
    22         }
    23     }
    24     
    25     while(LeftStart <= LeftEnd)
    26     {
    27         TmpArray[TmpArrayEnd++] = Array[LeftStart++];
    28     }
    29     while(RightStart <= RightEnd)
    30     {
    31         TmpArray[TmpArrayEnd++] = Array[RightStart++];
    32     }
    33     
    34     //copy TmpArray back to Array
    35     for(i = 0;i < ArrayLen;i ++,RightEnd --)
    36     {
    37         Array[RightEnd] = TmpArray[RightEnd];
    38     }
    39 }
    40 
    41 void _MSort(ElementType *Array,ElementType *TmpArray,int Left,int Right)
    42 {
    43     int Center;
    44     
    45     if(Left < Right)
    46     {
    47         Center = (Left + Right) / 2;
    48         _MSort(Array,TmpArray,Left,Center);
    49         _MSort(Array,TmpArray,Center+1,Right);
    50         _Merge(Array,TmpArray,Left,Center+1,Right);
    51     }
    52 }
    53 
    54 void MergeSort(ElementType *Array,int ArrayLen)
    55 {
    56     ElementType *TmpArray;
    57     
    58     TmpArray = malloc(ArrayLen * sizeof(ElementType));
    59     
    60     _MSort(Array,TmpArray,0,ArrayLen-1);
    61     free(TmpArray);
    62 }
    63 
    64 int main()
    65 {
    66     ElementType TestArray[10] = {9,2,4,1,2,5,9,3,7};
    67     MergeSort(TestArray,10);
    68     int i;
    69     for(i = 0;i < 10;i ++)
    70     {
    71         printf("%d ",TestArray[i]);
    72     }
    73     printf("
    ");
    74     return 0;
    75 }
  • 相关阅读:
    Codeforces 1137E 凸包
    Codeforces 1142D Foreigner (DP)
    Codeforces 1120C Compress String(DP)
    gym
    Codeforces 1142B Lynyrd Skynyrd
    PTA 估值一亿的AI核心代码
    HDU 6162 树链剖分
    洛谷P2146 树链剖分
    HTTP深入浅出http请求(转)-----http请求的过程和实现机制
    css实现不定宽高的div水平、垂直居中
  • 原文地址:https://www.cnblogs.com/Asurudo/p/9427434.html
Copyright © 2011-2022 走看看