1. Trang chủ
  2. » Công Nghệ Thông Tin

Bài giảng Cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp nổi bọt, chèn, chọn - TS. Trần Ngọc Việt

30 9 1

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

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Bài giảng Cấu trúc dữ liệu và giải thuật: Giải thuật sắp xếp nổi bọt, chèn, chọn gồm các nội dung chính sau giới thiệu về giải thuật sắp xếp nổi bọt, chèn, chọn; bài toán sắp xếp; các thuật toán sắp xếp đơn giản; các bước thuật toán; cài đặt thuật toán bubble sort. Mời các bạn cùng tham khảo!

KHOA CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ THÔNG TIN 34 KHOA CÔNG NGHỆ THÔNG TIN // a[0], a[1] cặp nghịch KHOA CÔNG NGHỆ THÔNG TIN KHOA CÔNG NGHỆ THÔNG TIN KHOA CƠNG NGHỆ THƠNG TIN • Cho dãy phần tử sau: {5, 1, 6, 2, 4, 3} Lượt Lượt Lượt 6 6 6 4 6 6 6 6 KHOA CÔNG NGHỆ THÔNG TIN Input: Dãy đối tượng (Các số chưa xếp): A[0], A[1],…,A[n-1] Output: Dãy đối tượng xếp (Các số tăng dần): A[0], A[1],…,A[n-1] Actions: void BubbleSort(int a[],int n) { int i, j; for (i = ; i< n-1 ; i++) for (j =i ; j > n-1 ; j ++) if(a[j]< a[j1]) // sai vị trí đổi chỗ Swap(a[j], a[j+1]); } End KHOA CÔNG NGHỆ THÔNG TIN #Giải thuật Nổi bọt - Bubble Sort: B.1: Gán i = B.2: Gán j = //danh sách có n phần tử a0,a1,a2…,an-1 B.3: Nếu A[j] > A[j + 1] Hốn đối chỗ A[j] A[j + 1] B.4: Nếu (j < n – i – 1): -Đúng j = j + quay lui bước -Sai chuyển sang bước B.5: Nếu (i < n – 1): -Đúng i = i + quay lui bước -Sai dừng Kết Thúc KHOA CƠNG NGHỆ THƠNG TIN 10 Ví dụ: cho mảng gồm phần tử khơng có thứ tự: 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật xếp chèn so sánh hai phần tử đầu tiên: 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật tìm 14 33 thứ tự tăng dần Bây giờ, 14 danh sách qua xếp 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật xếp chèn tiếp tục di chuyển tới phần tử so sánh 33 27 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Và thấy 33 khơng nằm vị trí 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật xếp chèn tráo đổi vị trí 33 27 Kiểm tra tất phần tử danh sách xếp Thấy danh sách có phần tử 14 27 lớn 14 Do danh sách giữ nguyên sau tráo đổi 14 – 27 – 33 – 10 – 35 – 19 – 42 - 44 -Danh sách có hai giá trị 14 27 Tiếp tục so sánh 33 với 10 14 – 27 – 33 – 10 – 35 – 19 – 42 - 44 KHOA CÔNG NGHỆ THÔNG TIN 16 -Hai giá trị không theo thứ tự 14 – 27 – 33 – 10 – 35 – 19 – 42 - 44 -Vì tráo đổi chúng 14 – 27 – 10 – 33 – 35 – 19 – 42 - 44 -Việc tráo đổi dẫn đến 27 10 không theo thứ tự 14 – 27 – 10 – 33 – 35 – 19 – 42 - 44 -Vì tráo đổi chúng 14 – 10 – 27 – 33 – 35 – 19 – 42 - 44 -Chúng ta lại thấy 14 10 không theo thứ tự 14 – 10 – 27 – 33 – 35 – 19 – 42 - 44 -Và tiếp tục tráo đổi hai số Cuối cùng, sau vòng lặp thứ có phần tử 10 – 14 – 27 – 33 – 35 – 19 – 42 - 44 -Tiến trình tiếp tục diễn tất giá trị chưa xếp xếp hết vào danh sách qua xếp Tiếp theo tìm hiểu khía cạnh lập trình giải thuật xếp chèn 10 – 14 – 19 – 27 – 33 – 35 – 42 - 44 KHOA CÔNG NGHỆ THÔNG TIN 17 Giải thuật xếp chèn - Insertion Sort Bước 1: Kiểm tra phần tử xếp trả Bước 2: Lấy phần tử Bước 3: So sánh với tất phần tử danh sách qua xếp Bước 4: Dịch chuyển tất phần tử danh sách mà lớn giá trị để xếp Bước 5: Chèn giá trị Bước 6: Lặp lại danh sách xếp KHOA CÔNG NGHỆ THÔNG TIN 18 Bắt đầu hàm insertionSort(arr: mảng phần tử) int Position int insert for i = to len(arr) thực hiện: //chọn giá trị để chèn insert = arr[i] Position = i //xác định vị trí cho phần tử chèn while (Position > arr[Position-1] > insert): arr[Position] = arr[Position-1] Position = Position -1 kết thúc while //chèn giá trị vị trí arr[Position] = insert kết thúc for Kết thúc hàm KHOA CÔNG NGHỆ THÔNG TIN 19 #thuật tốn tìm kiếm xếp chọn – Selection_Sort Step Step Step Step Step – − − – − duyệt mảng từ vị trí thứ tìm kiếm p.tu mảng hốn đổi giá trị với ptu tăng p.tu giá trị với p.tu lặp lại mảng xếp KHOA CÔNG NGHỆ THÔNG TIN 20 #minh họa – giải thuật xếp chọn arr[] = 65 – 27 – 16 – 24 - // Tìm phần tử nhỏ trong arr[0 4] // đổi chỗ với phần tử [3] – 27 – 16 – 24 – 65 // Tìm phần tử nhỏ trong arr[1 4] // đổi chỗ với phần tử arr[1 4] - [16] – 27 – 24 - 65 // Tìm phần tử nhỏ trong arr[2 4] // đổi chỗ với phần tử arr[2 4] – 16 - [24] – 27 – 65 // Tìm phần tử nhỏ trong arr[3 4] // đổi chỗ với phần tử arr[3 4] – 16 – 24 - [27] – 65 KHOA CÔNG NGHỆ THÔNG TIN 21 #Bài tập: Thực tính tốn bước theo giải thuật xếp chọn – Selection Sort Cho mảng: A = [30, 65, 100, 20, 40, 75] KHOA CÔNG NGHỆ THÔNG TIN 22 Câu 1: cho mảng gồm phần tử khơng có thứ tự: 14 – 33 – 27 – 110 – 19 a)Biểu diễn Giải thuật xếp bọt b)Biểu diễn giải thuật xếp chèn c)Biểu diễn giải thuật xếp chọn KHOA CÔNG NGHỆ THÔNG TIN 23 #Ôn tập: Áp dụng giải thuật tìm kiếm nhị phân – Binary Search Mảng xếp tăng dần Dãy số gồm phần tử x=12 (n=8) 11 15 18 20 Áp dụng giải thuật xếp bọt - Bubble Sort Thực xếp mảng A = [40, 15, 30] KHOA CÔNG NGHỆ THÔNG TIN 24 #Thực hành 1.1: #Giải thuật bọt - Bubble Sort >>> def bubble_sort(arr): for i in range(len(arr)): for j in range(len(arr) - 1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] >>> arr = [100, 30, 160, 40, 200, 75, 15, 90] >>> bubble_sort(arr) >>> print(arr) #Nhan xet: input & output cua Giai thuat tren? #Nhắc lại kiến thức – Giải thuật bọt KHOA CÔNG NGHỆ THÔNG TIN 25 # Thực hành 1.2: #Bubble Sort >>> def bubble_sort(arr): ?? for i in range(len(arr)): ?? for j in range(len(arr) - 1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] ?? >>> arr = [39, 25, 16, 20] >>> bubble_sort(arr) >>> print(arr) #Nhan xet: input & output cua Giai thuat tren? #Yêu cầu – comment vào dấu note, bước lặp, vòng lặp giải thuật KHOA CÔNG NGHỆ THÔNG TIN 26 # Thực hành 2: >>> def insertion_Sort(arr): for i in range(1, len(arr)): insert = arr[i] j = i-1 while (j >= and insert < arr[j]) : arr[j + 1] = arr[j] j -= arr[j + 1] = insert >>> arr = [14, 33, 27, 10, 35, 19, 42, 44] >>> insertion_Sort(arr) >>> for i in range(len(arr)): print ("% d" % arr[i]) #Nhận xét: input, output giải thuật xếp chèn #Nhắc lại kiến thức – Giải thuật xếp chọn KHOA CÔNG NGHỆ THÔNG TIN Bắt đầu hàm insertionSort(arr: mảng phần tử) int Position int insert for i = to len(arr) thực hiện: //chọn giá trị để chèn insert = arr[i] Position = i //xác định vị trí cho phần tử chèn while (Position > arr[Position-1] > insert): arr[Position] = arr[Position-1] Position = Position -1 kết thúc while //chèn giá trị vị trí arr[Position] = insert kết thúc for Kết thúc hàm 27 # Thực hành 3.1: #giải thuật xếp chọn >>> import math >>> import sys >>> arr = [50, 15, 12, 9] >>> for i in range(len(arr)): minimum = i for j in range(i+1, len(arr)): if arr[minimum] > arr[j]: minimum = j arr[i], arr[minimum] = arr[minimum], arr[i] >>> print ("Mang duoc sap xep la:") >>> for i in range(len(arr)): print("%d" %arr[i]) #Nhận xét: input, output giải thuật xếp chọn #Nhắc lại kiến thức – Giải thuật xếp chọn KHOA CÔNG NGHỆ THÔNG TIN 28 # Thực hành 3.2: >>> def selection_sort(arr): for i in range(len(arr)): = i for j in range(i + 1, len(arr)): if arr[j] < arr[min]: = j arr[min], arr[i] = arr[i], arr[min] return arr ?? ?? ?? >>> arr = [65, 27, 16, 24, 3] >>> selection_sort(arr) #Nhận xét: input, output giải thuật xếp chọn #Yêu cầu – comment vào dấu note, bước lặp, vòng lặp giải thuật KHOA CÔNG NGHỆ THÔNG TIN 29 ... 42 - 44 -Giải thuật xếp chèn tiếp tục di chuyển tới phần tử so sánh 33 27 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Và thấy 33 khơng nằm vị trí 14 – 33 – 27 – 10 – 35 – 19 – 42 - 44 -Giải thuật xếp. .. a)Biểu diễn Giải thuật xếp bọt b)Biểu diễn giải thuật xếp chèn c)Biểu diễn giải thuật xếp chọn KHOA CÔNG NGHỆ THÔNG TIN 23 #Ơn tập: Áp dụng giải thuật tìm kiếm nhị phân – Binary Search Mảng xếp tăng... (a[j-1] > a[j]) //hoán chuyển swap(&a[j-1], &a[j]); } KHOA CÔNG NGHỆ THÔNG TIN 13 KHOA CÔNG NGHỆ THÔNG TIN 14 -Sắp xếp chèn giải thuật xếp dựa so sánh chỗ -Một danh sách ln ln trì dạng qua xếp Sắp

Ngày đăng: 27/01/2023, 08:30

Xem thêm: