• [算法]归并排序


      核心原理:归并排序是对分治思想的一种应用,通过将一个序列划分成2个有序的子序列,然后合并起来既是排序的结果。那要如何获得有序的子序列了?递归调用自身,将子序列一直拆分成元素只有1个的程度再向上回归,即可得到有序的子序列;

      特点:时间复杂度O(nlongn),空间复杂度 O(n),稳定

      下面贴一下分治法的解题步骤:

      a.分解原问题为若干个子问题,这些子问题是原问题的规模较小的实例;

      b. 解决这些子问题,递归地求解各子问题的规模足够小,则直接求解;

      c. 合并这些子问题的解 成 原问题的解。

    归并排序,c语言:

     1 #include <stdio.h>
     2 // time.h是用来统计执行时间的,可以去掉;
     3 #include <time.h>
     4 
     5 void merge(int arry[],int start,int half,int size){
     6     int left[half];
     7     int right[size-half];
     8 
     9     for(int l=0;l<half;l++){
    10         left[l]=arry[l];
    11     }
    12 
    13     for(int r=0;r<size-half;r++){
    14         right[r]=arry[half+r];
    15     }
    16 
    17     int t=half;
    18     for(int i=0;i<size  ;i++){
    19         if(start<half && t<size ){
    20             if(left[start] < right[t-half]){
    21                 arry[i]=left[start];
    22                 start++;
    23             } else{
    24                 arry[i]=right[t-half];
    25                 t++;
    26             }
    27 
    28             // 左边序列遍历完
    29         } else if( start >= half && t<size ){
    30             arry[i]=right[t-half];
    31             t++;
    32 
    33             // 右边序列遍历完
    34         } else if(start < half && t >= size){
    35             arry[i]=left[start];
    36             start++;
    37         }
    38     }
    39 }
    40 
    41 // 归并排序
    42 void merge_sort(int  arry[],int size){
    43     if(!arry || size < 2){
    44         return;
    45     }
    46     // j是左边子序列的index,k是右边子序列的index
    47     int k=size/2;
    48     merge_sort(arry,k);
    49     merge_sort(&arry[k],size-k);
    50     merge(arry,0,k,size);
    51 
    52 }
  • 相关阅读:
    流程控制语句
    VMware虚拟机与Linux Centos7下载及安装教程
    ReduceTask的运行
    Spark最简单基础_欢乐的马小纪
    虚拟机扩容
    centos安装docker
    kafka生产消费者demo
    虚拟机NAT网络
    Spark开发的完整基础_欢乐的马小纪
    centos6 克隆虚机的紧要知识点_____马小纪&
  • 原文地址:https://www.cnblogs.com/zhaohuaxishi/p/15620505.html
Copyright © 2020-2023  润新知