Đề tài Công nghệ thông tin: Các thuật toán sắp xếp cơ bản

7 59 0
Đề tài Công nghệ thông tin: Các thuật toán sắp xếp cơ bản

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

Thông tin tài liệu

Đề tài Công nghệ thông tin: Các thuật toán sắp xếp cơ bản trình bày về sắp xếp chọn (Selection Sort), sắp xếp chèn (Insertion Sort), sắp xếp nổi bọt (Bubble Sort), sắp xếp nhanh (Quick Sort). Với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu hữu ích.

CÁC THUẬT TỐN SẮP XẾP CƠ BẢN Thành viên nhóm: Nguyễn Chánh Đại Mai Phước Vinh Tất Huỳnh Anh Khôi CẦN THƠ, 2015 MỤC LỤC SẮP XẾP CHỌN (SELECTION SORT) SẮP XẾP CHÈN (INSERTION SORT) SẮP XẾP NỔI BỌT (BUBBLE SORT) SẮP XẾP NHANH (QUICK SORT) CÁC THUẬT TOÁN SẮP XẾP CƠ BẢN Sắp xếp chọn (Selection Sort) a Ý tưởng: Xuất phát từ cuối (hoặc đầu) dãy, đổi chổ cặp phần tử kế cận để đưa phần tử nhỏ (lớn) cặp phần tử vị trí đầu (cuối) dãy hành, sau khơng xét đến vị trí tiếp theo, lần xử lý thứ i có vị trí đầu dãy i Lặp lại xử lý khơng cặp phần tử để xét b Giải thuật:  Bước 1: i =  Bước 2: Tìm phần tử a[Min] nhỏ dãy hành từ a[i] đến a[n]  Bước 3: Hoán vị a[Min] a[i]  Bước 4: Nếu i ≤ n-1 i = i + lặp lại bước 2, ngược lại c Độ phức tạp: O(n2) d Code tham khảo: void selectionSort(int a[], int n) { for (int i = 0; i key){ a[x+1] = a[x]; x; } a[x+1] = key; } } Sắp xếp bọt (Bubble Sort) a Ý tưởng: Xuất phát từ cuối (hoặc đầu) dãy, đổi chổ cặp phần tử kế cận để đưa phần tử nhỏ (lớn) cặp phần tử vị trí đầu (cuối) dãy hành, sau khơng xét đến vị trí tiếp theo, lần xử lý thứ i có vị trí đầu dãy i Lặp lại xử lý khơng cặp phần tử để xét NGUYỄN CHÁNH ĐẠI – MAI PHƯỚC VINH – TẤT HUỲNH ANH KHÔI TRANG CÁC THUẬT TOÁN SẮP XẾP CƠ BẢN b Giải thuật:  Bước 1: i =  Bước 2: Lần lượt so sánh đổi chổ (nếu cần) từ phải sang trái phần từ từ a[n] đến a[i]  Bước 3: i = i +  Bước 4: Nếu i < n quay lại Bước 2, ngược lại dừng c Độ phức tạp: O(n2) d Code tham khảo void BubbleSort(int a[], int n){ for (int i = 0; i < n-1; ++i){ for (int j = i+1; j < n; ++j) { if (a[i] > a[j]) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } } } } Sắp xếp nhanh (Quick Sort) a Ý tưởng: Tìm cách chia đơi dãy ban đầu cách chọn phần tử chốt (pivot) Từ dãy ban đầu, tất phần tử nhỏ phần tử chốt đưa bên trái dãy, tất phần tử lớn phần tử chốt đưa bên phải dãy Sau bước ta có phần tử chốt đứng vị trí Dãy ban đầu phân chia làm hai dãy nằm hai bên chốt Tiếp tục phân chia dãy theo cách tương tự đến dãy có độ dài Có thể lựa chọn phần tử chốt nằm đầu, cuối hay dãy Ở ta lựa chọn phần tử chốt nằm gần dãy b Giải thuật: NGUYỄN CHÁNH ĐẠI – MAI PHƯỚC VINH – TẤT HUỲNH ANH KHÔI TRANG CÁC THUẬT TOÁN SẮP XẾP CƠ BẢN  Bước 1: pivot = a[(l + r) / 2]  Bước 2: i = l; j = r  Bước 3:  Nếu a[i] < pivot i = i +  Nếu a[j] > pivot j = j –  Bước 4: Nếu i ≥ j đổi chỗ a[i] với a[j], quay bước  Bước 5: Lặp lại từ Bước đến Bước với đoạn a[l] đến a[j] a[i] đến a[r] tất đoạn có độ dài c Độ phức tạp:  Trường hợp tốt nhất: O(nlog2n)  Trường hợp xấu nhất: O(n2)  Trường hợp trung bình: O(nlog2n) d Code tham khảo: void quickSort(int a[], int l, int r) { if (l >= r) return; int pivot = a[(l + r) / 2]; int i = l, j = r; while (i pivot) j; if (i

Ngày đăng: 15/01/2020, 04:50

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan