MATLAB實例:冒泡排序算法

冒泡排序算法問題:

  • 算法介紹:冒泡排序法是一種簡單的排序算法,假設有某一數列a1a2ana_1,a_2,…a_n,算法過程如下。

  • step1: 首先比較a1a_1a2a_2的大小,如果a1>a2a_1>a_2,則令a1a_1a2a_2相互交換,接着比較a2a_2a3a_3的大小,同樣,如果a2>a3a_2>a_3,則令a2a_2a3a_3相互交換,以此類推,直至比較an1a_{n-1}ana_n的大小,如果an1>ana_{n-1}>a_n,則令an1a_{n-1}ana_n相互交換,經過上述操作,ana_n就變成了該數列中最大的元素。

  • step2: 仍然從a1a_1a2a_2開始比較,沿用第一步中的方法,不同的是,只需比較到an2a_{n-2}an1a_{n-1},以保證an1a_{n-1}是前n1n-1個元素中的最大數。

  • step3: 按照上述步驟step2,即可保證aia_i是前ii個元素中的最大數,其中i=n2n11i=n-2,n-1,…1,這樣,最終所得到的新的數列a1a2ana_1,a_2,…a_n即爲原始數列從小到大排列後的結果。

  • 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
  • 結束語:上述代碼根據本人理解進行整理編寫,如有錯誤或不妥之處,請指正!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章