Phương pháp sắp xếp nổi bọt (Bubble sort)

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 97 - 99)

5.1. Ý tưởng giải thuật Bubble sort.

Xuất phát từ khóa cuối dãy (Kn-1), So sánh khóa này với các khóa đứng trước, nếu gặp khóa lớn hơn thì đổi chỗ 2 khóa này cho nhau. Như vậy trong lượt đầu (i=0) khoá có giá trị nhỏ nhất sẽ chuyển lên đỉnh. Đến lượt thứ hai (i=1) khoá có giá trị nhỏ thứ hai sẽ được chuyển lên vị trí thứ hai, ... cho đến lượt cuối cùng (i=n-2). Kết thúc ta được dãy đã sắp xếp.

Nếu hình dung dẫy khoá được đặt thẳng đứng thì sau từng lượt sắp xếp các giá trị khoá nhỏ sẽ “ nổi “ dần lên giống như các bọt nước nổi lên trong nồi nước đang sôi. Vì vậy phương pháp này thường được gọi bằng cái tên khá đặc trưng là sắp xếp kiểu nổi bọt (Buble sort).

5.2. Mô tả giải thuật. Input: Input:

- K là một dãy khóa cần sắp xếp theo thứ tự tăng dần - n là số lượng khóa trong dãy K

- Các khóa được đánh số từ K0, K1,…Ki,…Kn-1 Process:

Lặp lại công việc sau từ khóa Ki (i=0) cho đến khóa sát cuối (Ki=n-2) Lặp lại công việc sau từ khóa Kj (j=n-1) cho đến hết dãy (Kj=i+1)

96 - So sánh Kj với Kj+1

- Nếu Kj < Kj+1 thì Hoán đổi giá trị của Kj và Kj+1 cho nhau Output: K là dãy khóa đã được sắp xếp theo chiều tăng dần.

5.3. Cài đặt giải thuật.

void BubleSort (int K[ ], int n) { int i, j, temp;

for (i=0 ; i<n-1; i++) for (j=n-1 ; j<=i+1; j--)

if (K[j] < K[j-1])

{ temp=K[j]; K[j]=K[j-1]; K[j-1]=temp ; } }

5.4. Biểu diễn giải thuật.

Mô tả giải thuật với dãy khóa:

K: 6 4 9 3 8 2 7 5

n = 8

97

Nhận xét:

Đối với một giải thuật, khi xét tới hiệu lực của nó người ta thường dựa vào hai tiêu chí chính là: Sự chiếm dụng bộ nhớ của giải thuật và đặc biệt là thời gian thực hiện của giải thuật. Tuy nhiên, cách đánh giá thời gian thực hiện giải thuật lại chủ yếu dựa vào phép toán tích cực nhất của giải thuật, mà giải thuật sắp xếp là phép toán so sánh giá trị khóa, còn phép toán chuyển đổi vị trí bản ghi cho đúng trật tự sắp xếp lại ít được đề cập đến, trên thực tế, thời gian thực hiện giải thuật sắp xếp cũng bị ảnh hưởng nhiều bởi tình trạng dãy khóa ban đầu (nếu dãy khóa có tình trạng ngược với chiều sắp xếp thì sẽ tốn thời gian hơn rất nhiều so với dãy khóa có tình trạng gần giống với chiều sắp xếp).

Do đó, để đánh giá thời gian thực hiện giải thuật sắp xếp, người ta sẽ đánh giá độ phức tạp tính toán của T(n) ở các trường hợp xấu nhất, tốt nhất và trung bình.

Người ta đã chứng minh được nếu chỉ dựa vào kết quả đánh giá T(n) ở trường hợp trung bình thì giải thuật Insertion sort tỏ ra hiệu quả hơn 3 giải thuật kia. Tuy nhiên, với n khá lớn thì độ phức tạp tính toán của 4 giải thuật trên đều có cấp O(n2).

Một phần của tài liệu Giáo trình cấu trúc dữ liệu và giải thuật (Trang 97 - 99)

Tải bản đầy đủ (PDF)

(186 trang)