博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归并排序
阅读量:4557 次
发布时间:2019-06-08

本文共 1136 字,大约阅读时间需要 3 分钟。

归并是建立在归并操作上的一种有效的排序,该算法是采用分治法(Divide and

Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序,称为二路。

 

算法描述

归并操作的过程如下:

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

 

 

分类
数据结构
最差时间复杂度 \Theta(n\log n)
最优时间复杂度 \Theta(n)
平均时间复杂度 \Theta(n\log n)
最差空间复杂度 \Theta(n)

 

 

C 代码:

void merge_sort(int src[] , int len){   //第一层循环是确定归并的分组    for( int n = 1 ; n <= len ; n <<= 1 ) {       //第二岑循环是结合第一层循环确定两个要合并的分组        for( int m = 0 ; m < len ; m += 2*n ) {            //合并两个子分组            for( int nextTuple = m+n ; nextTuple < (m+n*2)>len?len:(m+n*2) ; nextTuple++ ){                for( int prevTuple = m ; prevTuple < nextTuple ; prevTuple++ ){                    if( src[nextTuple] >= src[prevTuple] ){                        int temp = src[nextTuple];                        for(int k = nextTuple ; k > prevTuple ; k--)                        {                            src[k] = src[k-1];                        }                        src[prevTuple] = temp;                    }                }            }        }    }}

运行结果:

 

转载于:https://www.cnblogs.com/jvane/p/4494645.html

你可能感兴趣的文章
下载特定区域内街景照片数据 | Download Street View Photos within Selected Region
查看>>
StarUML 破解方法
查看>>
C语言结构体
查看>>
[转]Tribon船体生产设计应用
查看>>
easy ui datagrid 让某行复选框不能选中
查看>>
第六周作业
查看>>
关于adb端口被占用的解决办法
查看>>
php 部分内置函数的使用
查看>>
字符串处理技巧
查看>>
归档及压缩命令
查看>>
Mybatis步骤
查看>>
WPF自定义控件之扩展原生控件
查看>>
《区块链100问》笔记整理——42~49问
查看>>
使用Jquery+EasyUI 进行框架项目开发案例讲解之二---用户管理源码分享
查看>>
深入理解计算机系统(1.4)---并发与并行、浅谈抽象
查看>>
函数依赖的公理化系统
查看>>
rabbitmq学习(四):利用rabbitmq实现远程rpc调用
查看>>
侯捷C++学习(二)
查看>>
EasyPlayer RTSP Android安卓播放器修复播放画面卡在第一帧bug
查看>>
web项目中全局常量的添加
查看>>