1. Trang chủ
  2. » Luận Văn - Báo Cáo

báo cáo bài tập lớn cấu trúc dữ liệu và giải thuật chủ đề sắp xếp đổi chỗ trực tiếp interchange sort

14 0 0
Tài liệu được quét OCR, nội dung có thể không chính xác
Tài liệu đã được kiểm tra trùng lặp

Đ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

Thông tin cơ bản

Tiêu đề SAP XEP DOI CHO TRUC TIEP (Interchange sort)
Tác giả KTD-K63, Nguyễn Phước Trung, KTD-K63, D6 Tuan Kiột, KTD-K63, WwW, t2), =, Phạm Vũ Thanh Việt, Phan Thanh Luan, Nguyễn Bạch Anh Khụi, aA, Nhom Sinh viộn thure hiộn:, Nhom 2
Trường học TRUONG DAI HQC GIAO THONG VAN TAI
Chuyên ngành CAU TRÚC DỮ LIỆU VÀ GIẢI THUẬT
Thể loại BAO CAO BAI TAP LON
Năm xuất bản 2023
Thành phố Tp. Hộ Chi Minh
Định dạng
Số trang 14
Dung lượng 1,15 MB

Nội dung

CHUONG 2: TONG QUAN VE THUAT TOAN SAP XEP Sắp xếp dữ liệu là quá trình sắp xếp các phần tử trong danh sách hoặc mảng theo một thứ tự cụ thê thường là thứ tự tăng dần hoặc giảm dân.. Sắp

Trang 1

Nhom Sinh vién thure hién: Nhom 2

Tp Hé Chi Minh, nam 2023

Trang 2

LOI CAM ON

Nhóm chúng em xin gửi lời cảm ơn chân thành đến tất cả mọi người đã đóng góp và hỗ trợ chúng em trong việc hoàn thành báo cáo đề tài này Đây là một cơ hội để chúng em bày tỏ lòng biết ơn sâu sắc đối với sự hỗ trợ và đóng góp của cô và các bạn

Chúng em muốn gửi lời cảm ơn đặc biệt đến các giảng viên, người hướng dẫn, và đồng nghiên cứu đã cung cấp sự hướng dẫn, lời khuyên và sự hỗ trợ quý báu trong quá trình nghiên cứu và viết báo cáo Những góp ý và phản hồi của cô và các bạn đã giúp

nhóm cải thiện đề tài và đảm bảo tính khoa học và chất lượng của nó

Cuối cùng, nhóm xin gửi lời cảm ơn đến tất cả những người đã đọc và quan tâm đến báo cáo này Sự quan tâm của cô và các bạn đã là động lực để nhóm chúng em nỗ lực và công hiện hết minh vào đê tài này

Trang 3

NHAN XET CUA GIANG VIEN

Tp Hồ Chí Minh, ngày thang nam

Giang vién

Trang 4

MUC LUC

Trang 5

CHUONG 1: GIỚI THIỆU 1.1 Lý do chọn đề tài:

Trong thời đại số hóa hiện nay, khả năng sắp xếp dữ liệu là một khía cạnh quan trọng trong lĩnh vực khoa học máy tính và công nghệ thông tin Chọn chủ đề "Sắp xếp đổi chỗ trực tiếp (Interchange Sort)" là vì nhóm tôi muốn hiểu rõ hơn về một trong những thuật toán sắp xếp đơn giản nhất và cơ bản nhất Tuy Interchange Sort không phải là thuật

toán hiệu quả trong thực tê, nhưng việc năm vững nó có thê cải thiện kiên thức về các

thuật toán sắp xếp khác và cách chúng hoạt động Ngoài ra, việc nghiên cứu về Interchange Sort cũng giúp phát triển kỹ năng phân tích thuật toán và đánh giá hiệu suất, điều quan trọng trong công việc của một nhà phát triển phần mềm

1.2 Mục tiêu nghiên cứu: Hiểu rõ cơ bản về thuật toán sắp xếp đối chỗ trực tiếp (Interchange Sort) và cách hoạt

động của nó

Phân tích độ phức tạp thời gian và không gian của Interchange Sort đề đánh giá hiệu

suất của thuật toán

So sánh Interchange Sort với các thuật toán sắp xếp khác để đánh giá ưu điểm và nhược điểm của nó

Nắm vững kiến thức cơ bản về sắp xếp dữ liệu, có khả năng áp dụng những kiến thức

này vào các tình huống thực tế hoặc dự án phát triển phan mém

Dong góp vào cơ sở kiến thức trong lĩnh vực khoa học máy tính và thuật toán sắp xếp

Trang 6

CHUONG 2: TONG QUAN VE THUAT TOAN SAP XEP

Sắp xếp dữ liệu là quá trình sắp xếp các phần tử trong danh sách hoặc mảng theo một thứ tự cụ thê (thường là thứ tự tăng dần hoặc giảm dân) Việc này giúp tối ưu hóa tìm

kiếm, trình bày dữ liệu một cách cầu trúc, cải thiện hiệu suất các thuật toán và làm cho dữ

liệu dễ quán lý và phân tích Việc sắp xếp dữ liệu có nhiều ứng dụng thực tế quan trọng, bao gồm tìm kiếm nhanh, tạo danh sách thứ tự, làm cho dữ liệu dé đọc hơn và nhiều tác vụ khác Các thuật toán sắp xếp đóng vai trò quan trọng trong khoa học máy tính và lĩnh vực liên quan

Sắp xếp (hoặc sắp xếp dữ liệu) là quá trình xếp các phần tử trong một danh sách hoặc

mảng theo một thứ tự cụ thé, thường là theo thứ tự tăng dần hoặc giảm dan, dé tạo ra một

cầu trúc dữ liệu có trình tự dễ quản lý, tìm kiếm và phân tích Quá trình này thường sử

dụng một thuật toán để so sánh và đổi chỗ các phan tử sao cho chúng tuân thủ thứ tự được

yêu cầu Sắp xếp là một khía cạnh quan trọng của khoa học máy tính và có nhiều ứng dung trong thé giới thực, từ cơ sở dữ liệu đến ứng dụng web và nghiên cứu khoa học

- Sap xếp theo thứ tự: Đảm bảo rằng dữ liệu được sắp xếp theo thứ tự cụ thê (ví dụ: sắp xếp số nguyên theo thứ tự tăng dân)

- Tinh ôn định: Tính ôn định đề cập đến việc không làm thay đổi thứ tự của các phần tử có cùng giá trị

- Tôi ưu hóa thời gian va tai nguyén: Đối với các bộ dữ liệu lớn, thuật toán sắp xếp cần

tối ưu hóa thời gian và tài nguyên đề thực hiện nhanh chóng và hiệu quả

Trang 7

CHUONG 3: THUAT TOAN SAP XEP DOI CHO TRUC TIEP (Interchange Sort)

ali] > a[j] vai<j Nếu máng chưa sắp xếp, tức là các phần tử không được sắp xếp theo thứ tự tăng dần hoặc giảm dân, thì thường sẽ tổn tại nhiều nghịch thế trong mảng Điều này xuất phát từ sự xuất hiện của các cặp phân tử a[ï] và a[j] trong mảng mà thỏa mãn điều kiện a[i] > a[j] va i < j, tức là các phần tử đứng sau có giá trị nhỏ hơn các phần tử đứng trước

Ngược lại, nếễu mảng đã có thứ tự, tức là các phần tử đã được sắp xếp theo thứ tự tăng dần hoặc giảm dân, thì mảng sẽ không chứa nghịch thế Điều này xuất phát từ sự thỏa mãn điều kiện a[i] < a[i+1] cho tất cá các chỉ số ¡ từ 0 đến n-2 (với n là độ dài của mảng) Trong trường hợp này, không có cặp phần tử nào thỏa mãn điều kiện a[ï| > a[j] và ¡ < j do đó không có nghịch thế nào xuất hiện

Vì vậy, nếu mảng đã sắp xếp theo thứ tự tăng dân, thì ta có a[0] < a[1] < < a[n-1] đúng với tat cả các chỉ số ¡ từ 0 đến n-l, và mảng này sẽ không chứa bất kỳ nghịch thé nảo

Xuất phát từ phần tử đầu danh sách, tìm tất các các cặp nghịch thế chứa phân tử này Triệt tiêu chúng bằng cách đổi chỗ 2 phân tử trong cặp nghịch thế Lặp lại xử lý trên với phân tử kế tiếp trong danh sách

Bước 1: Khởi tạo biến i Bắt đầu từ vị trí đầu tiên của danh sách bằng cách gan gia trị ¡ = 0 Chúng ta sẽ sắp xếp từ đầu danh sách và di chuyên qua phân tử tiếp theo

Bước 2: Lặp qua danh sách Bên trong một vòng lặp while, thiết lập một biến j bằng ¡ + I Biến j sẽ giúp chúng ta tìm phân tử nhỏ hơn phần tử hiện tại (a[i]) trong danh sách bên phải

Trang 8

Bước 3: So sánh và hoán đổi chỗ (nếu cần) Trong vòng lặp while, chúng ta thực hiện các bước sau cho đến khi j nhỏ hơn tổng số phân tử trong danh sách (n):

+ Kiểm tra nếu a[j] < a[ï] tức là phần tử tại vị trí j nhỏ hơn phần tử hiện tại tại vị trí 1

+ Nếu điều kiện trên đúng, thực hiện hoán đổi chỗ giữa a[ï] và a[j] dé dat phan tử

nhỏ hơn lên vi tri 1

+ Tăng giá trị j lên 1 để di chuyên đến phần tử tiếp theo bên phải Bước 4: Tăng giá trị ï và lặp lại

+ Sau khi hoàn thành việc kiểm tra và hoán đối trong danh sách bên phải của a[ï] tăng giá frị 1 lên l

+ Nếu ¡ vẫn nhỏ hơn n - | (n-1 là vị trí của phần tử cuối cùng), quay lại Bước 2 để tiếp tục quá trình sắp xếp

+ Nếu ¡ lớn hơn hoặc bằng n - I, thuật toán kết thúc vì bạn đã sắp xếp toàn bộ danh sách

Cho danh sách ban đầu: [5, 2, 9, 3, 6| Sắp xếp theo thứ tự tăng dan

phần tử đầu tiên làm phần tử hiện tại (tại vị trí ¡ = 0)

So sánh phần tử hiện tại (5) với phần tử ở vị trí j (2) Vì 5 lớn hơn 2, nên bạn đôi chỗ hai phân tử này:

[5, 2, 9, 3, 6] — [2, 5, 9, 3, 6]

còn lại Bạn thay rang 5 lớn hơn 3, nên bạn tiếp tục đổi chỗ:

[2, 5, 9, 3, 6] — [2, 3, 9, 5, 6]

bạn không cần đổi chỗ

vị trí thứ hai làm phan tu hién tai (tai vi tri1 = 1) va lap lai qua trinh

phan tử còn lại Bạn đổi chỗ 3 và 9 để đảm bảo danh sách được sắp xếp:

Trang 9

- Bước 7: Tiếp tục lặp qua danh sách và so sánh 3 với phần tử cuối cùng (6) Không

cần đổi chỗ

thứ ba làm phân tử hiện tại (¡ = 2)

tử cuối cùng (6) Không cần đối chỗ

for Gnti=0;1<n- 1;1++) { for Gnt j=i+ l;j <n; j++) {

int main() { int arr{] = {5, 2, 9, 3, 6}; int n= sizeoffarr) / sizeof(arr[0]); std::cout << "Danh sách ban đầu: "; for (int i= 0;i<nz i++) §

std::cout << arr[i] <<";

}

/! Sắp xếp mảng interchangeSort(arr, n);

for Gnt1=0;1<nj1++) {

std::cout << arr[i] <<";

}

Trang 10

3.5 Độ phức tạp thời gian và không gian cua Interchange Sort 3.5.1 Độ phức tạp thời gian

Độ phức tạp thời gian của Interchange Sort trong trường hợp xấu nhất và trường hợp trung bình là O(n?), với "n" là số lượng phần tử cần sắp xếp trong danh sách Điều này đồng nghĩa với việc thời gian thực hiện của thuật toán tăng theo bình phương của số lượng phần tử trong danh sách

, , —Í , tp aks

2

chỗ đề hoàn thành việc sắp xếp Điều này làm cho thuật toán không hiệu quả cho danh

sách lớn vì đòi hỏi một số lượng lớn các thao tác so sánh và hoán đôi chỗ

3.5.2 Độ phức tạp không gian Độ phức tạp không gian của Interchange Sort là O(1), tức là không phụ thuộc vào kích thước của danh sách Interchange Sort chỉ cần một hằng số lượng bộ nhớ để lưu trữ các

biến tạm thời và không cần sử dụng bộ nhớ phụ thuộc vào kích thước danh sách Do đó,

được sử dụng trong giáo dục dé giới thiệu cho hoc sinh vé cac khai niém co ban

của thuật toán sắp xếp và cách thức hoạt động của chúng - _ Hiệu Quả với Danh Sách Nhỏ: Khi làm việc với các danh sách có kích thước nhỏ,

hiệu suất của Interchange Sort không phải là vẫn đề lớn Trong một số trường hợp, nó thậm chí có thể nhanh hơn các thuật toán sắp xếp phức tạp hơn do độ phức tạp cầu trúc thấp

- Không Cần Bộ Nhớ Phụ Thêm: Interchange Sort là một thuật toán sắp xếp "in- place" Nghĩa là nó không cần phải sử dụng thêm bất kỳ không gian bộ nhớ nào

Trang 11

ngoài không gian cần thiết đề lưu trữ mảng đang được sắp xếp Điều này làm cho

nó trở thành một lựa chọn tốt trong các trường hợp có hạn chế về bộ nhớ

- _ Ôn Định (Stable): Nó giữ nguyên thứ tự tương đôi của các phần tử có giá trị bang nhau Điều này có thê quan trọng trong một số ứng dụng, nơi mà thứ tự ban đầu của các phân tử mang thông tin quan trong

3.6.2 Nhược điểm

- _ Hiệu Suất Kém với Danh Sách Lớn: Do có độ phức tạp thời gian là O(n?), với "n" là số lượng phần tử, Interchange Sort trở nên không hiệu quả khi xử lý các danh sách lớn Số lần so sánh và tráo đôi cần thiết tăng theo cấp số nhân với kích thước danh sách, dẫn đến thời gian xử lý rất lâu

- - Nhiều So Sanh va Tráo Đôi Không Cần Thiết: Trong quá trình sắp xếp, thuật toán này thực hiện rất nhiều so sánh và tráo đôi, ngay cả khi phần tử đó đã ở vị trí đúng Điều này làm tăng thời gian xử lý không cần thiết, đặc biệt là trong trường hợp

danh sách đã được sắp xếp một phan hoặc hoàn toàn

- _ Không Thích Hợp cho Dữ Liệu Động: Khi làm việc với đữ liệu động, nơi mà các phân tử có thê thêm vào hoặc bớt đi liên tục, Interchange Sort không phải là lựa chọn tối ưu do cần phải thực hiện lại quá trình sắp xếp từ đầu sau mỗi lần thay đổi

- Không Tối Ưu trong Thực Tế: Trong thực tế, đặc biệt là trong các ứng dụng cần

xử lý lượng lớn dữ liệu hoặc yêu cầu hiệu suất cao, Interchange Sort hiếm khi

được sử dụng Các thuật toán sắp xếp khác thường được ưu tiên do hiệu suất và tính linh hoạt cao hơn

Trong giáo dục, việc sắp xếp danh sách sinh viên theo thứ tự từ cao đến thấp hoặc từ thấp đến cao có thể giúp quản lý và đánh giá hiệu quả hơn Thuật toán đôi chỗ trực tiếp có thé được sử dụng để sắp xếp danh sách này một cách nhanh chóng và dễ dàng

Trang 12

Chương Trình C

#include <stdio.h> #include

<string.h>

// Dinh

nghia cau

truc SinhVien

struct SinhVien {

char ten[50];

float diem;

b

int main() {

int n;

printi("Nha p sô lượng sinh viên: "3

scanf("%d" , &n);

// Khai bao mét

mảng chứa thong tin

sinh vién

struct

SinhVien danhSachSi nhVien[n];

// Nhap

thong tin từng sinh

viên for (int i =0;1<n; i++) {

printf("Nha

Trang 13

- Khai báo cấu trúc SinhVien: Dau tién, chương trình định nghĩa một cầu trúc

SinhVien để lưu trữ thông tin về mỗi sinh viên Cấu trúc này bao gồm hai thành phần chính:

+ ten: Một mảng ký tự đề lưu trữ tên của sinh viên (có kích thước tối đa là 50 ký tự)

+ diem: Một số thực đề lưu trữ điểm của sinh viên

- _ Nhập số lượng sinh viên: Người dùng sẽ được yêu cầu nhập số lượng sinh viên mà họ muốn nhập thông tin

- _ Khai báo một máng danhSachSinhVïen: Một màng được khai báo đề lưu trữ thông tin của các sinh viên, với kích thước là số lượng sinh viên mà người dùng đã nhập - - Nhập thông tin sinh viên: Chương trình sử dụng một vòng lặp for đề yêu cầu

người dùng nhập thông tin về từng sinh viên Điều này bao gồm tên và điểm - _ Sắp xếp danh sách sinh viên: Chương trình sử dụng một vòng lặp lồng nhau để so

sánh điểm của các sinh viên và đối chỗ chúng nếu cần thiết Cụ thé: + Vong lap ngoài (1) duyệt qua từng sinh viên

+ Vong lap trong (j) duyệt qua các sinh viên còn lại dé so sánh với sinh viên hiện tại (1)

+ Nếu điểm của sinh viên tại vị trí j lớn hơn điểm của sinh viên tại vị trí ¡, thì

Trang 14

[1] [2] [3] [4] [5] [6]

TÀI LIỆU THAM KHẢO

Nguyễn Linh Giang, Gido trinh Kỹ thuật lập trìmh, Nhà xuất bản Giáo dục Việt Nam, 2010, Phạm Văn Ất, Kỹ thuật lập trình C căn bản và nâng cao, NXB BK Hà Nội, 2023 David Griffiths & Dawn Griffiths, Head First C, 4/2012

VietVH, 70 thuật toán sắp xếp cơ bản, 2016, 10 Thuật toán sắp xếp cơ bản | VnCoding

Khanh 48, Các thudt toán sốp xếp, 2020, Các Thuật Toán Sắp Xép Trong C++

(codelearn.io)

Sắp xếp đổi chỗ trực tiếp Interchange Sort, 10/2021, Thuat toan sap xép déi ché trực tiếp

(Interchange Sort) (gochocit.com)

Ngày đăng: 17/09/2024, 16:01