可视化冒泡排序:使用MATLAB动态展示排序过程

在这篇文章中,我将展示如何使用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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇