归并排序算法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两段. ...
随机推荐
- Bootrap 项目实战(微金所前端首页)第二部分(首页源码)
首页源码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- 吴裕雄 python 机器学习——K均值聚类KMeans模型
import numpy as np import matplotlib.pyplot as plt from sklearn import cluster from sklearn.metrics ...
- Oracle中-事务-序列-视图-数据类型笔记
事务(Transaction) 事务(Transaction)是一个操作序列.这些操作要么都做,要么都不做,是一个不可分割的工作单位,是数据库环境中的逻辑工作单位. 事务是为了保证数据库的完整性 在o ...
- Little Sub and Traveling(杭师大第十二届校赛E题) 欧拉回路
题目传送门 题目大意: 从0出发,每次只能跳到(i*2)%n或者(i*2+1)%n,求字典序最大的哈密顿回路. 思路: 首先n为奇数时无解,先来证明这一点. 先假设n为奇数,若要回到原点,则必定有一步 ...
- jenkins+Publish Over SSH 提示:Transferred 0 file(s)
之前公司用jekins来进行自动化发布,现在公司因没有运维,所以自己学习.并搭建了一个jenkins的环境来进行项目自动化部署. 不料在最后连接ssh后部署时,一直提示Transferred 0 fi ...
- 文献综述十六:基于UML的中小型超市管理系统分析与设计
一.基本信息 标题:基于UML的中小型超市管理系统分析与设计 时间:2016 出版源:Journal of Xiangnan University 文件分类:uml技术系统的研究 二.研究背景 开发一 ...
- python fileinput处理多文件
import fileinput with fileinput.input(files=(path1,path2)) as f: for line in f: print(line)
- 剑指offer等算法总结归类
从数据结构分 一.链表: 3.题目描述:输入一个链表,从尾到头打印链表每个节点的值(递归) 思路:递归调用,调一次,加一次到list中 14.题目描述:输入一个链表,输出该链表中倒数第k个结点 两个指 ...
- 权重平等分布局And TableRow布局误区
开头语: 本人最近在自学Android,虽然本人有2年Java Web的开发经验.但是发现Android的自学之路并不是那么平坦,我没有Android真机.但是有一个window phone的手机.开 ...
- 深入理解JavaScript系列(42):设计模式之原型模式
介绍 原型模式(prototype)是指用原型实例指向创建对象的种类,并且通过拷贝这些原型创建新的对象. 正文 对于原型模式,我们可以利用JavaScript特有的原型继承特性去创建对象的方式,也就是 ...