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 + |
全部评论
请发表评论