giai thuat sap xep noi bot

6 158 1
giai thuat sap xep noi bot

Đang tải... (xem toàn văn)

Thông tin tài liệu

http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Giải thuật xếp cấu trúc liệu & giải thuật Sắp xếp xếp liệu theo định dạng cụ thể Trong khoa học máy tính, giải thuật xếp xác định cách để xếp liệu theo thứ tự Sắp xếp theo thứ tự xếp theo thứ tự dạng số thứ tự dạng chữ từ điển Tính quan trọng việc xếp liệu nằm chỗ: việc tìm kiếm liệu tối ưu liệu xếp theo thứ tự (tăng giảm) Sắp xếp sử dụng để biểu diễn liệu định dạng dễ đọc Giải thuật xếp In-place Not-in-place Các giải thuật xếp cần thêm số nhớ phụ để so sánh nhớ tạm để lưu giữ số phần tử liệu Những giải thuật mà không yêu cầu thêm nhớ phụ việc xếp tiến hành phần nhớ khai báo trước (ví dụ mảng chẳng hạn) gọi in-place sorting Ví dụ cho loại giải thuật xếp giải thuật xếp bọt (bubble sorting) Nhưng số giải thuật xếp, chương trình cần thêm lượng nhớ mà lớn với số phần tử xếp Các giải thuật gọi not-inplace sorting Ví dụ cho loại giải thuật xếp trộn (merge sort) Giải thuật xếp cố định xếp so sánh Một giải thuật xếp gọi xếp cố định sau tiến hành xếp vị trí tương đối phần tử không bị thay đổi http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Một giải thuật gọi xếp so sánh trình thực giải thuật tiến hành so sánh khóa đổi chỗ phần tử cho Tức vị trí tương đối phần tử bị thay đổi Giải thuật xếp Adaptive Non-Adaptive Một giải thuật xem adaptive, tận dụng phần tử xếp danh sách mà xếp Đó là, xếp danh sách ban đầu có số phần tử xếp, giải thuật dạng adaptive ghi nhận phần tử cố gắng không thay đổi thứ tự chúng Trái ngược với loại giải thuật trên, giải thuật dạng non-adaptive không ghi nhận phần tử xếp trước Giải thuật loại vấn cố gắng xếp lại phần tử danh sách ban đầu http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Các khái niệm quan trọng giải thuật xếp Dưới phần giới thiệu ngắn gọn cho số khái niệm xuất thảo luận giải thuật xếp: Thứ tự tăng Một dãy giá trị xem thứ tự tăng dần phần tử đứng sau lớn phần tử đứng trước Ví dụ: 1, 3, 5, 6, Thứ tự giảm Một dãy giá trị xem thứ tự giảm dần phần tử đứng sau nhỏ phần tử đứng trước Ví dụ: 9, 6, 5, 3, Thứ tự khơng tăng Một dãy giá trị xem thứ tự không tăng phần tử đứng sau nhỏ phần tử đứng trước Ví dụ: 9, 6, 5, 5, Loại thứ tự xuất dãy có chứa giá trị giống (trong ví dụ 5) Thứ tự khơng giảm Một dãy giá trị xem thứ tự không giảm phần tử đứng sau lớn phần tử đứng trước Ví dụ: 1, 5, 5, 6, Loại thứ tự xuất dãy có chứa giá trị giống (trong ví dụ 5) ắp xếp bọt (Bubble Sort) ? Sắp xếp bọt giải thuật xếp đơn giản Giải thuật xếp tiến hành dựa việc so sánh cặp phần tử liền kề tráo đổi thứ tự chúng khơng theo thứ tự Giải thuật khơng thích hợp sử dụng với tập liệu lớn mà độ phức tạp trường hợp xấu trường hợp trung bình Ο(n2) với n số phần tử Giải thuật xếp bọt giải thuật chậm số giải thuật xếp Giải thuật chậm giải thuật đổi chỗ trực tiếp số lần so sánh nhau, đổi chỗ hai phần tử kề nên số lần đổi chỗ nhiều Cách giải thuật xếp bọt làm việc? Giả sử có mảng chưa qua xếp gồm phần tử Bây sử dụng giải thuật xếp bọt để xếp mảng http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Giải thuật xếp bọt bắt đầu với hai phần tử đầu tiên, so sánh chúng để kiểm tra xem phần tử lớn Trong trường hợp này, 33 lớn 14, hai phần tử theo thứ tự Tiếp so sánh 33 27 Chúng ta thấy 33 lớn 27, hai giá trị cần tráo đổi thứ tự Mảng thu sau: Tiếp so sánh 33 35 Hai giá trị theo thứ tự Sau so sánh hai giá trị 35 10 Vì 10 nhỏ 35 nên hai giá trị chưa theo thứ tự http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Tráo đổi thứ tự hai giá trị Chúng ta tiến tới cuối mảng Vậy sau vòng lặp, mảng trơng sau: Để đơn giản, hiển thị hình ảnh mảng sau vòng lặp Sau lần lặp thứ hai, mảng trơng giống như: Sau vòng lặp, giá trị di chuyển tới vị trí cuối Sau vòng lặp thứ 3, mảng trơng giống như: Và không cần tráo đổi thứ tự phần tử nữa, giải thuật xếp bọt thấy mảng xếp xong Tiếp theo, tìm hiểu thêm số khía cạnh thực tế giải thuật xếp Giải thuật cho xếp bọt (Bubble Sort) Giả sử list mảng có n phần tử Tiếp giả sử hàm swap để tráo đổi giá trị phần tử mảng (đây giả sử, tất nhiên bạn viết code riêng cho hàm swap này) Bắt đầu giải thuật BubbleSort(list) for tất phần tử list list[i] > list[i+1] swap(list[i], list[i+1]) kết thúc if thúc for return list Kết thúc BubbleSort http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     if kết http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­‐giai-­‐thuat/index.jsp                                                                            Copyright  ©  vietjack.com     Giải thuật mẫu cho xếp bọt (Bubble Sort) Chúng ta thấy giải thuật xếp bọt so sánh cặp phần tử mảng trừ toàn mảng hồn tồn xếp theo thứ tự tăng dần Điều làm tăng độ phức tạp, tức tăng thao tác so sánh tráo đổi không cần thiết mảng không cần tráo đổi tất phần tử xếp theo thứ tự tăng dần Để tránh việc xảy ra, sử dụng biến swapped chẳng hạn để giúp biết có cần thực thao tác tráo đổi thứ tự hay không Nếu không cần thiết khỏi vòng lặp Bạn theo dõi phần giải thuật mẫu minh họa sau: Bắt đầu hàm bubbleSort( list : mảng phần tử ) loop = list.count; for i = tới loop-1 thực hiện: swapped = false for j = tới loop-1 thực hiện: /* so sánh phần tử cạnh */ if list[j] > list[j+1] then /* tráo đổi chúng */ swap( list[j], list[j+1] ) swapped = true kết thúc if kết thúc for /*Nếu không cần tráo đổi phần tử tức mảng xếp Thốt khỏi vòng lặp.*/ if(not swapped) then break kết thúc if kết thúc for Kết thúc hàm return list Triển khai giải thuật xếp bọt C Một điều mà chưa nói tới phần thiết kế giải thuật sau vòng lặp giá trị lớn xuất vị trí cuối mảng (như hình minh họa: sau vòng lặp 35; sau vòng lặp 33 35; …) Do đó, vòng lặp không cần bao gồm phần tử xếp Để thực điều này, phần code giới hạn vòng lặp lặp bên để tránh phải lặp lại giá trị qua xếp Để theo dõi code đầy đủ giải thuật xếp bọt ngôn ngữ C, mời bạn click chuột vào chương: Sắp xếp bọt (Bubble Sort) C   http://vietjack.com/                                                                                                                              Trang  chia  sẻ  các  bài  học  online  miễn  phí     ...http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­ giai- ­ thuat/ index.jsp                                                                            Copyright...  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­ giai- ­ thuat/ index.jsp                                                                            Copyright...  sẻ  các  bài  học  online  miễn  phí     http://vietjack.com/cau-­‐truc-­‐du-­‐lieu-­‐va-­ giai- ­ thuat/ index.jsp                                                                            Copyright

Ngày đăng: 02/12/2017, 13:35