在这篇文章中,我将展示如何使用MATLAB创建一个可视化的冒泡排序过程。冒泡排序是一种简单但经典的排序算法,通过不断交换相邻元素的位置来实现有序化。为了让大家更直观地理解冒泡排序的原理,我将通过动态柱状图的形式演示每次元素交换的过程。
1. 初始化数据与图表
首先,我们需要生成一个包含 100 个随机整数的数组,并使用 bar()
函数创建初始的柱状图来展示这些数据。
% 随机生成100个数字,并将它们放入一个数组中
array = randi([1, 100], 1, 100);
n = length(array);
% 创建初始的柱状图
h = bar(array, 'FaceColor', [0.2, 0.6, 0.8]);
ylim([0, 110]);
title('冒泡排序可视化');
xlabel('元素索引');
ylabel('元素值');
pause(1);</pre>
在这里,我们使用 randi([1, 100], 1, 100)
生成了一个大小为 100 的随机数组,值的范围在 1 到 100 之间。接着,我们利用 bar()
函数创建了一个柱状图,其中每个柱形表示数组中的一个元素。
2. 实现冒泡排序并动态更新图表
接下来,我们使用嵌套的 for
循环来实现冒泡排序,并在排序过程中更新柱状图以便直观地展示每一步的变化。
%核心算法
for i = 1:n-1
for j = 1:n-i
if array(j) > array(j+1)
% 交换元素
temp = array(j);
array(j) = array(j+1);
array(j+1) = temp;
% 更新柱状图,标记正在移动的矩形
h.YData = array;
h.FaceColor = 'flat';
colors = repmat([0.2, 0.6, 0.8], n, 1);
colors(j, :) = [1, 0, 0]; % 标记正在移动的矩形为红色
colors(j+1, :) = [1, 0, 0];
h.CData = colors;
pause(0.001);
end
end
end
在排序的每一步,我们都对相邻的两个元素进行比较,如果前一个元素大于后一个元素,就交换它们的位置。每次交换后,我们更新柱状图的数据 (h.YData = array
) 并用 pause(0.001)
函数暂停一段时间,以便让人眼能够捕捉到柱状图的变化。
为了更好地展示元素交换的过程,我们使用了 FaceColor
属性和 CData
来动态更改柱形的颜色。具体来说,我们将当前正在比较的两个元素的颜色标记为红色,以便观众能够清楚地看到正在进行交换的元素。
3. 效果展示
4.完整的代码
% 随机生成100个数字,并将它们放入一个数组中
array = randi([1, 100], 1, 100);
n = length(array);
% 创建初始的柱状图
h = bar(array, 'FaceColor', [0.2, 0.6, 0.8]);
ylim([0, 110]);
title('冒泡排序可视化');
xlabel('元素索引');
ylabel('元素值');
pause(1);
%核心算法
for i = 1:n-1
for j = 1:n-i
if array(j) > array(j+1)
% 交换元素
temp = array(j);
array(j) = array(j+1);
array(j+1) = temp;
% 更新柱状图,标记正在移动的矩形
h.YData = array;
h.FaceColor = 'flat';
colors = repmat([0.2, 0.6, 0.8], n, 1);
colors(j, :) = [1, 0, 0]; % 标记正在移动的矩形为红色
colors(j+1, :) = [1, 0, 0];
h.CData = colors;
pause(0.001);
end
end
end