Chung minh phép so sánh bubble sort
Chào mừng các bạn quay trở lại với blog của Nguyễn Văn Hiếu. Đây là một bài viết trong series các thuật toán sắp xếp có minh họa code sử dụng ngôn ngữ lập trình C++. Ở bài viết này Nguyễn Văn Hiếu xin giới thiệu tới các bạn thuật toán sắp xếp nổi bọt. Nội dung bài viết bao gồm các phần sau: Show
Lưu ý: Bài viết chỉ mô tả cho việc sắp xếp dãy số tăng dần theo thuật toán sắp xếp nổi bọt. Việc sắp xếp dãy số giảm dần sẽ tương tự và bạn đọc tự tìm hiểu Bài viết liên quan:
Ý tưởng của sắp xếp nổi bọtMinh họa thuật toán sắp xếp nổi bọtThuật toán sắp xếp nổi bọt thực hiện sắp xếp dãy số bằng cách lặp lại công việc đổi chỗ 2 số liên tiếp nhau nếu chúng đứng sai thứ tự(số sau bé hơn số trước với trường hợp sắp xếp tăng dần) cho đến khi dãy số được sắp xếp. Ví dụ minh họaGiả sử chúng ta cần sắp xếp dãy số [5 1 4 2 8] này tăng dần. Lần lặp đầu tiên: ( 5 1 4 2 8 ) –> ( 1 5 4 2 8 ), Ở đây, thuật toán sẽ so sánh hai phần tử đầu tiên, và đổi chỗ cho nhau do 5 > 1. ( 1 5 4 2 8 ) –> ( 1 4 5 2 8 ), Đổi chỗ do 5 > 4 ( 1 4 5 2 8 ) –> ( 1 4 2 5 8 ), Đổi chỗ do 5 > 2 ( 1 4 2 5 8 ) –> ( 1 4 2 5 8 ), Ở đây, hai phần tử đang xét đã đúng thứ tự (8 > 5), vậy ta không cần đổi chỗ. Lần lặp thứ 2: ( 1 4 2 5 8 ) –> ( 1 4 2 5 8 ) ( 1 4 2 5 8 ) –> ( 1 2 4 5 8 ), Đổi chỗ do 4 > 2 ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) Bây giờ, dãy số đã được sắp xếp, Nhưng thuật toán của chúng ta không nhận ra điều đó ngay được. Thuật toán sẽ cần thêm một lần lặp nữa để kết luận dãy đã sắp xếp khi và khi khi nó đi từ đầu tới cuối mà không có bất kỳ lần đổi chỗ nào được thực hiện. Lần lặp thứ 3: ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 ) Code sắp xếp nổi bọt trong C/C++// Code from https://blog.luyencode.net include void swap(int &x, int &y) { }
// Hàm sắp xếp bubble sort
void bubbleSort(int arr[], int n)
{ }
/ Hàm xuất mảng /
void printArray(int arr[], int size)
{ }
// Driver program to test above functions
int main()
{ }
Ở đây, trong hàm bubbleSort tôi sử dụng thêm một biến haveSwap để kiểm tra tại lần lặp hiện hành có xảy ra việc đổi chỗ hai số không. Nếu không, ta có thể kết luận mảng đã sắp xếp mà không cần phải thêm một lần lặp nữa.Kiểm tra kết quả: Sorted array: 11 12 22 25 34 64 90 Độ phức tạp thuật toán
Không gian bộ nhớ sử dụng: O(1) Nếu bạn đang cần học một ngôn ngữ lập trình, hay tìm tới các khóa học hay mà tôi chia sẻ ở mục khóa học nhé. Bạn hãy để lại các thắc mắc, ý kiến đóng góp nếu có xuống mục bình luận ở cuối bài viết nhé. Sắp xếp là quá trình bố trí lại các phần tử trong một tập hợp theo một trình tự nào đó nhằm mục đích giúp quản lý và tìm kiếm các phần tử dễ dàng và nhanh chóng hơn. Tại sao phải sắp xếp?
Các phương pháp sắp xếp thông dụng:
Interchange SortKhái niệm nghịch thế:
Mảng chưa sắp xếp sẽ có nghịch thế Mảng đã có thứ tự sẽ không chứa nghịch thế a[0] <= a[1] <=… <=[n -1] Nhận xét:
Ý tưởng:
Đánh giá:
Bubble SortÝ tưởng:
Đánh giá:
Khuyết điểm:
Insertion SortNhận xét:
Ý tưởng chính:
Đánh giá:
Selection SortNhận xét:
Ý tưởng: mô phỏng một trong những cách sắp xếp tự nhiên nhất trong thực tế:
Đánh giá:
Tạm kếtNhư vậy là mình đã giới thiệu cho các bạn 4 thuật toán sắp xếp thông dụng. Ở phần tới mình sẽ giới thiệu thêm cho các bạn thêm các thuật toán sắp xếp khác. |