导
LEAD
语
感谢关注matlab爱好者公众号!如果公众号文章对您有帮助,别忘了点击分享和“在看”哦!若您对公众号有什么意见或建议,请在公众号中回复或在任意文章底部留言!
排序算法在编程领域中起着举足轻重的作用,在目标检索、机器学习、数值计算、图像处理等领域有着广泛地应用。为了追本溯源,公众号特推出常用经典排序算法系列推文,让小伙伴们深入了解排序算法的实现原理,同时也提升matlab编程能力。
今天给大家的介绍的排序算法为:冒泡排序算法,它与简单选择排序算法有些类似,不过它不是选择位置标记,而是直接将序列中两相邻元素进行交换,较大的元素下沉,较小的元素上浮,下面就一起来看看该算的实现原理吧。
冒泡排序算法实现过程(以升序排列为例):
对于长度为N的无序数组A,假设以A(1)为作为起始元素,将A(1)与A(2)作比较,如果A(1)>A(2),则两者交换,否则保持不变;然后将A(2)与A(3)比较,如果A(2)>A(3),则两者交换,否则保持不变;以此类推,直至A(n-1)与A(n)比较,如果A(n-1)>A(n),则两者交换,否则保持不变,这样即完成一次冒泡操作,最大的元素将沉至序列尾部;按照以上方法逐个完成冒泡操作,即可完成无序数组的排序。
matlab代码
主程序:main.m
format short;
clc;clear;
A = round(rand(1,10),2);
nA = BubbleSort(A);
disp(['原始序列:',num2str(A)]);
disp(['冒泡排序:',num2str(nA)]);
冒泡排序函数:BubbleSort.m
function A = BubbleSort(A)
% 感谢关注:matlab爱好者
% 冒泡选择排序算法源代码
% 作者:matlab爱好者
len = length(A);
% 外层循环控制冒泡操作移位
for w = 1:len
% 内层循环进行相邻元素依次比较
flag = 0; % 为了提高冒泡法效率,增加位置交换标识,
% 位置交换标识值发生改变,说明序列还是无序状态,
% 如果不发生改变,则说明已经完成排序,无需再进行后面的操作
for v = 1:len-w
if(A(v)>A(v+1))
% 完成位置交换
tmp = A(v);
A(v) = A(v+1);
A(v+1) = tmp;
flag = 1;
end
end
if flag == 0
break;
end
end
封面图片:由DaKub在Pixabay上发布
参考资料:https://www.runoob.com/w3cnote/sort-algorithm-summary.html
看完还想看 (点击下方文字直接访问)