Tạo một chức năng hoặc chương trình có hai đầu vào:
- Danh sách các số nguyên sẽ được sắp xếp (dưới 20 phần tử)
- Một số nguyên dương,
N
cho biết bạn nên thực hiện bao nhiêu so sánh
Hàm sẽ dừng và xuất danh sách các số nguyên kết quả sau khi N
so sánh. Nếu danh sách được sắp xếp đầy đủ trước khi N
so sánh được thực hiện, thì danh sách được sắp xếp sẽ được xuất ra.
Các Bubble sort thuật toán nổi tiếng, và tôi đoán hầu hết mọi người biết điều đó. Mã giả và hoạt hình sau đây (cả hai từ bài viết Wikipedia được liên kết) sẽ cung cấp các chi tiết cần thiết:
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
/* if this pair is out of order */
if A[i-1] > A[i] then
/* swap them and remember something changed */
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
Hoạt hình dưới đây cho thấy sự tiến bộ:
Một ví dụ (lấy trực tiếp từ bài viết Wikipedia được liên kết) hiển thị các bước khi sắp xếp danh sách ( 5 1 4 2 8 )
::
Đầu tiên vượt qua
1: ( 5 1 4 2 8 ) -> ( 1 5 4 2 8 ) // Here, algorithm compares the first two elements,
// and swaps since 5 > 1.
2: ( 1 5 4 2 8 ) -> ( 1 4 5 2 8 ) // Swap since 5 > 4
3: ( 1 4 5 2 8 ) -> ( 1 4 2 5 8 ) // Swap since 5 > 2
4: ( 1 4 2 5 8 ) -> ( 1 4 2 5 8 ) // Now, since these elements are already in order
// (8 > 5), algorithm does not swap them.
Đèo thứ hai
5: ( 1 4 2 5 8 ) -> ( 1 4 2 5 8 )
6: ( 1 4 2 5 8 ) -> ( 1 2 4 5 8 ) // Swap since 4 > 2
7: ( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
8: ( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
Bây giờ, mảng đã được sắp xếp, nhưng thuật toán không biết liệu nó đã được hoàn thành chưa. Thuật toán cần một lượt toàn bộ mà không có bất kỳ trao đổi nào để biết nó được sắp xếp.
Đèo thứ ba
9: ( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
10:( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
11:( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
12:( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
Các trường hợp thử nghiệm:
Định dạng: Number of comparisons (N): List after N comparisons
Input list:
5 1 4 2 8
Test cases:
1: 1 5 4 2 8
2: 1 4 5 2 8
3: 1 4 2 5 8
4: 1 4 2 5 8
5: 1 4 2 5 8
6: 1 2 4 5 8
10: 1 2 4 5 8
14: 1 2 4 5 8
Input list:
0: 15 18 -6 18 9 -7 -1 7 19 19 -5 20 19 5 15 -5 3 18 14 19
Test cases:
1: 15 18 -6 18 9 -7 -1 7 19 19 -5 20 19 5 15 -5 3 18 14 19
21: -6 15 18 9 -7 -1 7 18 19 -5 19 19 5 15 -5 3 18 14 19 20
41: -6 9 -7 15 -1 7 18 18 -5 19 19 5 15 -5 3 18 14 19 19 20
60: -6 -7 -1 9 7 15 18 -5 18 19 5 15 -5 3 18 14 19 19 19 20
61: -6 -7 -1 7 9 15 18 -5 18 19 5 15 -5 3 18 14 19 19 19 20
81: -7 -6 -1 7 9 15 -5 18 18 5 15 -5 3 18 14 19 19 19 19 20
119: -7 -6 -1 -5 7 9 15 5 15 -5 3 18 14 18 18 19 19 19 19 20
120: -7 -6 -1 -5 7 9 15 5 15 -5 3 18 14 18 18 19 19 19 19 20
121: -7 -6 -1 -5 7 9 5 15 15 -5 3 18 14 18 18 19 19 19 19 20
122: -7 -6 -1 -5 7 9 5 15 15 -5 3 18 14 18 18 19 19 19 19 20
123: -7 -6 -1 -5 7 9 5 15 -5 15 3 18 14 18 18 19 19 19 19 20
201: -7 -6 -5 -1 -5 3 5 7 9 14 15 15 18 18 18 19 19 19 19 20
221: -7 -6 -5 -5 -1 3 5 7 9 14 15 15 18 18 18 19 19 19 19 20
- Có, thuật toán sắp xếp bong bóng tích hợp được cho phép.
- Không, bạn không thể giả sử chỉ có số nguyên dương hoặc số nguyên duy nhất.
- Việc sắp xếp phải theo thứ tự được mô tả ở trên. Bạn không thể bắt đầu ở cuối danh sách