冒泡排序算法問題:
-
算法介紹:冒泡排序法是一種簡單的排序算法,假設有某一數列,算法過程如下。
-
step1: 首先比較與的大小,如果,則令與相互交換,接着比較與的大小,同樣,如果,則令與相互交換,以此類推,直至比較與的大小,如果,則令與相互交換,經過上述操作,就變成了該數列中最大的元素。
-
step2: 仍然從與開始比較,沿用第一步中的方法,不同的是,只需比較到與,以保證是前個元素中的最大數。
-
step3: 按照上述步驟step2,即可保證是前個元素中的最大數,其中,這樣,最終所得到的新的數列即爲原始數列從小到大排列後的結果。
-
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
- 結束語:上述代碼根據本人理解進行整理編寫,如有錯誤或不妥之處,請指正!