Matlab一段时间不用发现有些生疏了,就用归并排序来练手吧.代码没啥说的,百度有很多.写篇博客,主要是记下matlab语法,以后备查.

 

测试代码

srcData = [1,3,2,4,6,5,8,7,9]; %测试数据

 

dataSrcLength = length(srcData); %数据长度

 

srcData2 = diGuiMerge(srcData, 1,dataSrcLength) %递归实现

srcData1 = dieDaiMerge(srcData) %迭代实现

 

合并自函数M文件

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 说明:负责进行数据合并

% 参数:

%   dataSrc  待处理的数据

%   left1    数据1的开始位置

%   right1   数据1的结束位置

%   left2    数据2的开始位置

%   right2   数据2的结束位置

% 返回:合并后的数据 dataSrc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function dataSrc = mergeSub(dataSrc, left1, right1, left2, right2)

 

    dataSrcLength = length(dataSrc);

    tempData = zeros(1, right2 - left1 + 1);

    i = left1;

    j = left2;

    tempIndex = 1;

 

    %进行数据合并

    while(1)

        if dataSrc(i) >= dataSrc(j)

            tempData(tempIndex) = dataSrc(i);

            i = i+1;

            tempIndex = tempIndex + 1;

        else

             tempData(tempIndex) = dataSrc(j);

             j = j + 1;

              tempIndex = tempIndex + 1;

        end

 

        if i > right1 || i > dataSrcLength

            break;

        end

 

        if j > right2 || j > dataSrcLength

            break;

        end

    end

 

    %查看左边数据是否还有剩下

    while(i <= right1 && i <= dataSrcLength)

        tempData(tempIndex) = dataSrc(i);

        i = i + 1;

        tempIndex = tempIndex + 1;

    end

 

    %查看右边数据是否还有剩下

    while(j <= right2 && j <= dataSrcLength)

        tempData(tempIndex) = dataSrc(j);

        j = j + 1;

        tempIndex = tempIndex + 1;

    end

 

    %把数据放回在原始数据中

    j = 1;

    for i = left1: right2

        dataSrc(i) = tempData(j);

        j = j + 1;

 

        if j > right2 - left1 + 1

            break;

        end

       

        if j > dataSrcLength

            break;

        end

    end

end

 

递归实现M文件

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 说明:归并排序的递归实现

% 参数:

%   dataSrc  待处理的数据

%   startIndex    数据的开始位置

%   endIndex      数据的结束位置

% 返回:排序后的数据 dataSrc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function srcData = diGuiMerge(srcData, startIndex, endIndex)

 

%待排序的数据只有一个,则直接返回

if endIndex - startIndex == 0

    return;

end

 

%归并排序左半边数据

srcData = diGuiMerge(srcData, 1, floor((startIndex + endIndex) / 2));

%归并排序右半边数据

srcData = diGuiMerge(srcData, floor((startIndex + endIndex) / 2) + 1, endIndex);

%将两块数据合并

srcData = mergeSub(srcData, 1, floor((startIndex + endIndex) / 2), floor((startIndex + endIndex) / 2) + 1, endIndex);

 

end

 

迭代实现M文件

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 说明:归并排序的迭代实现

% 参数:

%   dataSrc  待处理的数据

% 返回:排序后的数据 dataSrc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function srcData = dieDaiMerge(srcData)

 

dataSrcLength = length(srcData); %数据长度

 

lengthStep = 1; %初始子排序长度

 

while(1)   

   

    %分步排序

    srcData = merge2Sub(srcData, lengthStep); 

   

    if lengthStep * 2 > dataSrcLength

        break;

    end

   

    lengthStep = lengthStep*2;

end

 

end

 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% 说明:归并排序的迭代实现的子函数

% 参数:

%   dataSrc         待处理的数据

%   lengthStep      数据块长度

% 返回:排序后的数据 dataSrc

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

function dataSrc = merge2Sub(dataSrc, lengthStep)

    dataSrcLength = length(dataSrc);

 

    startIndex = 1;

    startIndexEnd = startIndex + lengthStep - 1;

    start2Index = startIndex + lengthStep;

    start2IndexEnd = start2Index + lengthStep - 1;

   

    %合并指定长度的数据块

    while(1)

        dataSrc = mergeSub(dataSrc, startIndex, startIndexEnd, start2Index, start2IndexEnd);

       

        startIndex = start2Index + lengthStep;

        startIndexEnd = startIndex + lengthStep - 1;

        start2Index = startIndex + lengthStep;

        start2IndexEnd = start2Index + lengthStep - 1;

       

        if startIndex > dataSrcLength || start2Index > dataSrcLength

            break;

        end

    end

end   

 

归并排序算法Matlab实现的更多相关文章

  1. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  2. 必须知道的八大种排序算法【java实现】(三) 归并排序算法、堆排序算法详解

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

  3. python实现折半查找算法&&归并排序算法

    今天依旧是学算法,前几天在搞bbs项目,界面也很丑,评论功能好像也有BUG.现在不搞了,得学下算法和数据结构,笔试过不了,连面试的机会都没有…… 今天学了折半查找算法,折半查找是蛮简单的,但是归并排序 ...

  4. 【java排序】 归并排序算法、堆排序算法

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

  5. java实现归并排序算法

    归并排序算法思想:分而治之(divide - conquer);每个递归过程涉及三个步骤第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素.第二, 治理: ...

  6. 标准差分进化算法matlab程序实现(转载)

    标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...

  7. 密度峰值聚类算法MATLAB程序

    密度峰值聚类算法MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 密度峰值聚类算法简介见:[转] 密度峰值聚类算法(DPC) 数据见:MATL ...

  8. GWO(灰狼优化)算法MATLAB源码逐行中文注解(转载)

    以优化SVM算法的参数c和g为例,对GWO算法MATLAB源码进行了逐行中文注解. tic % 计时器 %% 清空环境变量 close all clear clc format compact %% ...

  9. #AcWing系列课程Level-2笔记——2. 归并排序算法

    归并排序算法 编写归并排序,记住下面的思路,代码也就游刃有余了! 1.首先确定数组的中间位置的分界点(下标),也就是mid=(left+right)>>1,分成left,right两段. ...

随机推荐

  1. CSS z-index在ie67中不起作用

    在chrome浏览器中可以看到这样的效果: 但是在ie67中看到的是: 这是z-index在ie浏览器中的一个兼容性问题: 一般来说z-index越大,层级越高,就会越在顶层显示,但是在ie67浏览器 ...

  2. 获取dataGridView双击时判断双击的是下面的行,还是列头

    private void dataGridView1_DoubleClick(object sender, EventArgs e) { Point hit = this.dataGridView1. ...

  3. image_size must contain 3 elements[4]

    今天在制作自己训练集合并且训练的时候,碰见了如下的错: image_size must contain 3 elements[4] 这是因为训练的数据集中不是所有的图片位深都是三通道的. 写一个脚本查 ...

  4. 牛客 Wannafly挑战赛27 D 绿魔法师

    传送门 \(\color{green}{solution}\) 分析下,在\(1e5+1\)内,一个数的约数个数最多为\(2^{6}\)个,所以我们可以考虑枚举约数 复杂度\(O(N^{2^{6 \t ...

  5. JS中将XML转为JSON对象

    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.js"></script> <scr ...

  6. 10g 升级到11g 失效对象2则

    ########SAMPLE 0 Invalid X_$ Views & Synonyms After Upgrading to 11g (文档 ID 878623.1) Those view ...

  7. J15W-J45W铜质截止阀厂家,J15W-J45W铜质截止阀价格 - 专题栏目 - 无极资讯网

    无极资讯网 首页 最新资讯 最新图集 最新标签   搜索 J15W-J45W铜质截止阀 无极资讯网精心为您挑选了(J15W-J45W铜质截止阀)信息,其中包含了(J15W-J45W铜质截止阀)厂家,( ...

  8. unity 渲染第二步

    先不要用 unity shader 提供给你的转换矩阵,看看屏幕上的图形,你会学到更多. --- <unity 渲染箴言> 假设你 create 了一个 cube,放在默认的位置,默认的 ...

  9. Kubernetes Device Plugins

    The gRPC server that the device plugin must implement is expected to be advertised on a unix socket ...

  10. Robot Framework的安装、更新与卸载

    Robot Framework的安装.更新与卸载 一,安装RF前的准备 一般就三种执行环境 Python, Jython (JVM) 和 IronPython (.NET): 安装python: #T ...