归并排序算法Matlab实现
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实现的更多相关文章
- 归并排序算法 java 实现
归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...
- 必须知道的八大种排序算法【java实现】(三) 归并排序算法、堆排序算法详解
一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...
- python实现折半查找算法&&归并排序算法
今天依旧是学算法,前几天在搞bbs项目,界面也很丑,评论功能好像也有BUG.现在不搞了,得学下算法和数据结构,笔试过不了,连面试的机会都没有…… 今天学了折半查找算法,折半查找是蛮简单的,但是归并排序 ...
- 【java排序】 归并排序算法、堆排序算法
一.归并排序算法 基本思想: 归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并 ...
- java实现归并排序算法
归并排序算法思想:分而治之(divide - conquer);每个递归过程涉及三个步骤第一, 分解: 把待排序的 n 个元素的序列分解成两个子序列, 每个子序列包括 n/2 个元素.第二, 治理: ...
- 标准差分进化算法matlab程序实现(转载)
标准差分进化算法matlab程序实现 自适应差分演化算法方面的Matlab和C++代码及论文 差分进化算法 DE-Differential Evolution matlab练习程序(差异演化DE) [ ...
- 密度峰值聚类算法MATLAB程序
密度峰值聚类算法MATLAB程序 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 密度峰值聚类算法简介见:[转] 密度峰值聚类算法(DPC) 数据见:MATL ...
- GWO(灰狼优化)算法MATLAB源码逐行中文注解(转载)
以优化SVM算法的参数c和g为例,对GWO算法MATLAB源码进行了逐行中文注解. tic % 计时器 %% 清空环境变量 close all clear clc format compact %% ...
- #AcWing系列课程Level-2笔记——2. 归并排序算法
归并排序算法 编写归并排序,记住下面的思路,代码也就游刃有余了! 1.首先确定数组的中间位置的分界点(下标),也就是mid=(left+right)>>1,分成left,right两段. ...
随机推荐
- 【实战分享】安卓app测试的一些记录
一.app代码未混淆1.使用7zip解压apk文件2.执行命令:dex2jar.bat apk解压后文件夹中的classes.dex文件3.上述命令执行后会在apk文件夹中生成java源码文件clas ...
- rabbitmq 消息确认
消息确认主要用在接收方 如果接收方没有确认, broker可以重发,确保消息至少消息一次..
- Oracle汉字用户名数据脱敏长度不变,rpad函数使用
信息安全考虑,有时需要对用户名称进行数据脱敏. 针对Oracle数据库,进行取数数据脱敏处理 脱敏规则: 长度小于9个字符,只保留前3个汉字与后3个汉字,中间全部由*填充. 长度9个字及以上及奇数,隐 ...
- 解决视图状态消息验证代码 (MAC) 错误
https://blog.csdn.net/bingtingabc/article/details/49148745 2015年10月15日 10:05:56 bingtingabc 阅读数:3397 ...
- idea没有tomcat选项在setting也没有Application Servers
原因:dea未正常关闭,重启后发现,Tomcat的选项不见了,File->Setting->Build,Excution,Deployment里面Application Servers也不 ...
- 转 JSON在PHP中的基本应用
PHP原生提供json_encode()和json_decode()函数,前者用于编码,后者用于解码. 一.json_encode() 该函数主要用来将数组和对象,转换为json格式.先看一个数组转换 ...
- 3dsmax2020卸载/安装失败/如何彻底卸载清除干净3dsmax2020注册表和文件的方法
3dsmax2020提示安装未完成,某些产品无法安装该怎样解决呢?一些朋友在win7或者win10系统下安装3dsmax2020失败提示3dsmax2020安装未完成,某些产品无法安装,也有时候想重新 ...
- Spark Streaming初探
1. 介绍 Spark Streaming是Spark生态系统中一个重要的框架,建立在Spark Core之上,与Spark SQL.GraphX.MLib相并列. Spark Streaming是 ...
- HTTP传输内容的压缩
最近在看尤大的ssr项目的demo,看他的项目里有用到compression,完全看不懂这是什么鬼,然后百度了一下,文档也都是英文的,看着有点吃力,隐约的觉得这是压缩http请求的,做前端的都知道,在 ...
- Shell脚本之awk详解
一.基本介绍 1.awk: awk是一个强大的文本分析工具,在对文本文件的处理以及生成报表,awk是无可替代的.awk认为文本文件都是结构化的,它将每一个输入行定义为一个记录,行中的每个字符串定义为一 ...