十大排序算法(一):冒泡排序法

冒泡排序算法问题:
  • 算法介绍:冒泡排序法是一种简单的排序算法,假设有某一数列 a 1 , a 2 , … a n a_1,a_2,…a_n a1a2an,算法过程如下。

  • step1: 首先比较 a 1 a_1 a1 a 2 a_2 a2的大小,如果 a 1 > a 2 a_1>a_2 a1>a2,则令 a 1 a_1 a1 a 2 a_2 a2相互交换,接着比较 a 2 a_2 a2 a 3 a_3 a3的大小,同样,如果 a 2 > a 3 a_2>a_3 a2>a3,则令 a 2 a_2 a2 a 3 a_3 a3相互交换,以此类推,直至比较 a n − 1 a_{n-1} an1 a n a_n an的大小,如果 a n − 1 > a n a_{n-1}>a_n an1>an,则令 a n − 1 a_{n-1} an1 a n a_n an相互交换,经过上述操作, a n a_n an就变成了该数列中最大的元素。

  • step2: 仍然从 a 1 a_1 a1 a 2 a_2 a2开始比较,沿用第一步中的方法,不同的是,只需比较到 a n − 2 a_{n-2} an2 a n − 1 a_{n-1} an1,以保证 a n − 1 a_{n-1} an1是前 n − 1 n-1 n1个元素中的最大数。

  • step3: 按照上述步骤step2,即可保证 a i a_i ai是前 i i i个元素中的最大数,其中 i = n − 2 , n − 1 , … 1 i=n-2,n-1,…1 i=n2n11,这样,最终所得到的新的数列 a 1 , a 2 , … a n a_1,a_2,…a_n a1a2an即为原始数列从小到大排列后的结果。

  • MATLAB程序实现

%Date:2019-11-11
%Writer:无名十三

%%本程序的目的是利用冒泡排序算法对已知某组数据进行排序
function y = bubble_sort(A)    %参数A为向量或矩阵
if nargin==0
    errordlg('未输入参数!', 'Error!')
end
if ischar(A) == 1
    errordlg('输入数据中含有字符或字符串,无法进行排序!', 'Error!')
    error                      %报错终止程序运行
end

m = size(A);                   %求出参数A的维数
if m(1)==1 | m(2)==1           %当参数A为向量不是矩阵时
    n = length(A);             %得到向量A布包含的元素个数
else                           %参数A为矩阵而非向量时
    n = m(1)*m(2);             %得到矩阵A中包含的元素个数
    A = reshape(A, 1, n);      %化矩阵A为向量
end

for i = 1:n-1
    for j = 1:n-i
        if A(j) > A(j+1)
            temp = A(j);       %核心代码
            A(j) = A(j+1);
            A(j+1) = temp;
        end
    end
end

fprintf('经冒泡排序算法排序后的结果如下:\n\n')   %输出排序结果
for i = 1:n
    fprintf('%f ', A(i))
    if mod(i,8) == 0
        fprintf('\n\n')
    end
end
fprintf('\n')
end
%%
  • 示例1:对如下向量A进行排序
>> A = [1 6 9 8 13 6 9 5 20 15 36 27];
>> bubble_sort(A)
经冒泡排序算法排序后的结果如下:

1.000000 5.000000 6.000000 6.000000 8.000000 9.000000 9.000000 13.000000 

15.000000 20.000000 27.000000 36.000000
  • 示例2:对如下三阶方阵B进行排序
>> B = [2 3 8; 9 6 7; 15 32 17];
>> bubble_sort(B)
经冒泡排序算法排序后的结果如下:

2.000000 3.000000 6.000000 7.000000 8.000000 9.000000 15.000000 17.000000 

32.000000

若看完本文不太理解,还可阅读本人另一篇介绍更为详细的文章十大排序算法(一):冒泡排序法

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值