• 归并排序


    1.算法介绍

      归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

    2.算法原理

      第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
      第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
      第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
      重复步骤3直到某一指针超出序列尾
      将另一序列剩下的所有元素直接复制到合并序列尾

    3.源代码

      

     1 void Merge(int sourceArr[],int tempArr[],int startIndex,int midIndex,int endIndex)
     2 {
     3     int i = startIndex,j=midIndex+1,k = startIndex;
     4     while(i!=midIndex+1 && j!=endIndex+1)
     5     {
     6         if(sourceArr[i]>sourceArr[j])
     7             tempArr[k++] = sourceArr[i++];
     8         else
     9             tempArr[k++] = sourceArr[j++];
    10     }
    11     while(i!=midIndex+1)
    12         tempArr[k++] = sourceArr[i++];
    13     while(j!=endIndex+1)
    14         tempArr[k++] = sourceArr[j++];
    15     for(i=startIndex;i<=endIndex;i++)
    16         sourceArr[i] = tempArr[i];
    17 }
    18  
    19 //内部使用递归
    20 void MergeSort(int sourceArr[],int tempArr[],int startIndex,int endIndex)
    21 {
    22     int midIndex;
    23     if(startIndex<endIndex)
    24     {
    25         midIndex=(startIndex+endIndex)/2;
    26         MergeSort(sourceArr,tempArr,startIndex,midIndex);
    27         MergeSort(sourceArr,tempArr,midIndex+1,endIndex);
    28         Merge(sourceArr,tempArr,startIndex,midIndex,endIndex);
    29     }
    30 }
    31  
    32 int main(int argc,char * argv[])
    33 {
    34     int a[8]={50,10,20,30,70,40,80,60};
    35     int i,b[8];
    36     MergeSort(a,b,0,7);
    37     for(i=0;i<8;i++)
    38         printf("%d ",a[i]);
    39     printf("
    ");
    40     return 0;
    41 }

    4.算法时间复杂度

      O(nlgn)

    5.稳定性分析

      稳定排序

  • 相关阅读:
    zookeeper实现主从选举
    基于Zookeeper+MHA的mysql高可用架构设计
    MHA实现MySQL主从自动在线切换功能
    redis 主从复制
    虚拟iP
    nginx 主从
    代码的快速操作
    网页延时加载
    ajax循环数据
    js实现网页中打印、刷新、关闭、前进、后退、返回等操作
  • 原文地址:https://www.cnblogs.com/pngcui/p/4641416.html
Copyright © 2020-2023  润新知