Trong thuật toán này, chúng ta sử dụng hai vòng lặp lồng nhau để so sánh từng cặp phần tử kế tiếp của mảng. Nếu phần tử đứng trước lớn hơn phần tử đứng sau, chúng ta hoán đổi chúng. Điều này đảm bảo rằng các phần tử lớn hơn sẽ “nổi” lên đầu mảng, giống như bọt nổi lên trên bề mặt nước.
Thuật toán tiếp tục lặp lại việc so sánh và hoán đổi cho đến khi không còn cặp phần tử nào cần hoán đổi nữa, tức là mảng đã được sắp xếp.
Chú ý rằng chúng ta truyền mảng vào hàm bằng cách sử dụng từ khóa var
, điều này có nghĩa là mảng được truyền bởi tham chiếu và sẽ được thay đổi bên trong hàm.
procedure bubbleSort(var arr: array of Integer);
var
i, j, temp: Integer;
begin
for i := Length(arr) - 1 downto 1 do
begin
for j := 0 to i - 1 do
begin
if arr[j] > arr[j+1] then
begin
temp := arr[j];
arr[j] := arr[j+1];
arr[j+1] := temp;
end;
end;
end;
end;
Dưới đây là một ví dụ cụ thể về cách sử dụng thuật toán sắp xếp nổi bọt trong Pascal:
program BubbleSortExample;
const
SIZE = 10;
type
IntArray = array[0..SIZE-1] of Integer;
var
arr: IntArray;
i: Integer;
procedure bubbleSort(var arr: IntArray);
var
i, j, temp: Integer;
begin
for i := Length(arr) - 1 downto 1 do
begin
for j := 0 to i - 1 do
begin
if arr[j] > arr[j+1] then
begin
temp := arr[j];
arr[j] := arr[j+1];
arr[j+1] := temp;
end;
end;
end;
end;
begin
// Khởi tạo mảng ngẫu nhiên
Randomize;
for i := 0 to SIZE-1 do
begin
arr[i] := Random(100);
Write(arr[i], ' ');
end;
Writeln;
// Sắp xếp mảng và in kết quả
bubbleSort(arr);
for i := 0 to SIZE-1 do
begin
Write(arr[i], ' ');
end;
Writeln;
end.
Trong ví dụ này, chúng ta khai báo một mảng arr
có kích thước SIZE
và loại IntArray
, được định nghĩa trước đó. Chúng ta cũng khai báo một hàm bubbleSort
để sắp xếp mảng theo thuật toán sắp xếp nổi bọt.
Trong phần chính của chương trình, chúng ta sử dụng hàm Randomize
để khởi tạo các phần tử của mảng ngẫu nhiên từ 0 đến 99. Sau đó, chúng ta in mảng ban đầu và sử dụng hàm bubbleSort
để sắp xếp mảng. Cuối cùng, chúng ta in kết quả sau khi sắp xếp.