Đồ án: Xây dựng chức năng tìm kiếm và sắp xếp trên mảng cấu trúc và danh sách liên kết

Đồ án xây dựng chức năng tìm kiếm, sắp xếp hiệu quả trên mảng cấu trúc và danh sách liên kết. Tối ưu theo chủ đề lựa chọn. Xem ngay!

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Đồ án

2022

60
1
0

Phí lưu trữ

30 Point

Mục lục chi tiết

DANH MỤC BẢNG

DANH MỤC HÌNH ẢNH

1. CHƯƠNG 1: Giới thiệu đề bài

1.1. Các chức năng ( liệt kê chức năng sẽ xây dựng)

2. CHƯƠNG 2: TÌM KIẾM VÀ SẮP XẾẾP TRẾN M ẢNG CẤẾU TRÚC

2.1. Nh ập danh sách khách hàng

2.1.1. Chương trình con

2.1.2. Kếết quả chạy

2.2. Xuấất danh sách khách hàng

2.2.1. Chương trình con

2.2.2. Kếết quả chạy

2.3. Tìm thông tin khách hàng theo mã khách hàng ( dùng Linẽar Sẽarch và Binary Sẽarch)

2.3.1. Chương trình con

2.3.2. Kếết quả chạy

2.4. Săấp xềấp danh sách khách hàng thẽo mã khách hàng:

2.4.1. ả ch aưsắếp xếếp:

2.4.2. Chương trình con

2.4.3. Kết quả chạ y dùng Shaker Sort

2.4.4. Kếết quả chạ y dùng Selecton Sort

2.4.5. Kếết quả chạ y dùng Interchange Sort

2.4.6. Kếết quả chạ y dùng Bubble Sort

2.4.7. Kếết quả chạ y dùng Inserton Sort

2.4.8. Kếết quả chạ y dùng Quick Sort

2.4.9. Kếết quả chạ y dùng Merge Sort

2.4.10. Đ ể ki ểm tra các ch ương trình con ta dùng 2 hàm:

3. TÌM KIẾẾM VÀ SẮẾP XẾẾP TRẾN DANH SÁCH LIẾN KẾẾT

3.1. Định nghĩa phần tử danh sách

3.1.1. Chương trình con

3.2. Định nghĩa danh sách

3.3. Khởi tạo danh sách

3.3.1. Chương trình con

3.4. Tạo phần tử danh sách

3.4.1. Chương trình con

3.5. Nhập danh sách khách hàng

3.5.1. Chương trình con

3.5.2. kết quả chạy

3.6. Xuất danh sách khách hàng

3.6.1. Chương trình con

3.6.2. Kết quả chạy

3.7. Đếm số khách hàng có trong danh sách

3.7.1. Chương trình con

3.7.2. Kết quả chạy

3.8. Tìm kiếm thông tin khách hàng có trong danh sách

3.8.1. Chương trình con

3.8.2. kết quả chạy

3.9. sắp xếp danh sách khách hàng theo mã khách hàng

3.9.1. chương trình con

3.9.2. Danh sách khi chưa sắp xếp:

3.9.3. Kết quả chạy dùng Selection Sort

3.9.4. Kết quả chạy dùng Interchange Sort

3.9.5. Kết quả chạy dùng Bubble Sort

3.9.6. Kết quả chạy dùng Insertion Sort

3.9.7. Kết quả chạy dùng Quick Sort

3.9.8. Kiểm tra chương trình con

3.10. Để kiểm tra các chương trình con ta sử dụng 2 hàm:

3.10.1. kết quả chạy

Các chức năng đã làm được

Các chức năng chưa làm được

TÀI LIỆU THAM KHẢO

Tóm tắt

I. Tổng Quan Về Tìm Kiếm Sắp Xếp Dữ Liệu Mảng Danh Sách

Trong lĩnh vực cấu trúc dữ liệu và giải thuật, tìm kiếmsắp xếp là hai thao tác cơ bản và quan trọng. Chúng đóng vai trò then chốt trong việc xây dựng các ứng dụng hiệu quả và tối ưu. Bài viết này sẽ đi sâu vào các phương pháp tìm kiếmsắp xếp trên hai cấu trúc dữ liệu phổ biến: mảngdanh sách liên kết. Mảng, với khả năng truy cập ngẫu nhiên thông qua chỉ số, mang lại hiệu suất cao trong một số thuật toán. Ngược lại, danh sách liên kết, với tính linh hoạt trong việc chèn và xóa phần tử, phù hợp với các tình huống dữ liệu động. Việc lựa chọn cấu trúc dữ liệu và thuật toán phù hợp phụ thuộc vào yêu cầu cụ thể của bài toán, đặc biệt là kích thước dữ liệu, tần suất các thao tác tìm kiếm, sắp xếp, chèn và xóa. Theo tài liệu gốc, đồ án tập trung vào việc xây dựng chức năng tìm kiếmsắp xếp trên mảng cấu trúcdanh sách liên kết để quản lý thông tin khách hàng.

1.1. Khái niệm cơ bản về Mảng và Danh sách liên kết

Mảng là một tập hợp các phần tử cùng kiểu dữ liệu, được lưu trữ liên tiếp trong bộ nhớ. Đặc điểm nổi bật của mảng là khả năng truy cập phần tử thông qua chỉ số, cho phép thao tác nhanh chóng. Danh sách liên kết là một chuỗi các nút (node), mỗi nút chứa dữ liệu và một con trỏ đến nút tiếp theo trong chuỗi. Danh sách liên kết hỗ trợ chèn và xóa phần tử dễ dàng hơn so với mảng, nhưng việc truy cập phần tử đòi hỏi phải duyệt tuần tự. Sự khác biệt này ảnh hưởng trực tiếp đến hiệu quả của các thuật toán tìm kiếmsắp xếp.

1.2. Tầm quan trọng của Tìm kiếm và Sắp xếp trong CNTT

Tìm kiếmsắp xếp là những thao tác cơ bản trong nhiều ứng dụng phần mềm. Tìm kiếm cho phép người dùng nhanh chóng định vị thông tin cần thiết, từ việc tìm kiếm sản phẩm trên trang web thương mại điện tử đến tìm kiếm tệp tin trên hệ điều hành. Sắp xếp dữ liệu giúp cho việc tìm kiếm trở nên hiệu quả hơn, đồng thời tạo điều kiện thuận lợi cho việc phân tích và xử lý dữ liệu. Các hệ quản trị cơ sở dữ liệu, công cụ tìm kiếm trên web, và các ứng dụng phân tích dữ liệu đều sử dụng rộng rãi các thuật toán tìm kiếmsắp xếp.

II. Thách Thức Khi Triển Khai Thuật Toán Tìm Kiếm Sắp Xếp Mảng

Mặc dù mảng có ưu điểm về truy cập phần tử nhanh chóng, việc triển khai các thuật toán tìm kiếmsắp xếp trên mảng cũng đặt ra một số thách thức. Một trong những thách thức lớn nhất là sự cố định về kích thước. Khi kích thước của mảng được xác định trước, việc chèn thêm phần tử có thể dẫn đến tràn bộ nhớ, hoặc phải cấp phát lại mảng mới lớn hơn, gây tốn kém tài nguyên. Ngoài ra, một số thuật toán sắp xếp trên mảng, như sắp xếp chèn (Insertion Sort) có thể trở nên kém hiệu quả khi kích thước mảng lớn. Độ phức tạp thuật toán cũng là một yếu tố cần xem xét. Các thuật toán sắp xếp có độ phức tạp O(n^2) (ví dụ: sắp xếp nổi bọt, sắp xếp chọn) không phù hợp với các mảng có kích thước lớn.

2.1. Vấn đề về hiệu suất và Độ phức tạp thuật toán Tìm kiếm Mảng

Các thuật toán tìm kiếm trên mảng có hiệu suất khác nhau tùy thuộc vào đặc điểm dữ liệu và phương pháp tìm kiếm được sử dụng. Tìm kiếm tuyến tính (Linear Search) có độ phức tạp O(n), phù hợp với các mảng nhỏ hoặc khi không có thông tin gì về thứ tự của phần tử. Tuy nhiên, đối với các mảng đã được sắp xếp, tìm kiếm nhị phân (Binary Search) với độ phức tạp O(log n) mang lại hiệu suất vượt trội. Lựa chọn thuật toán tìm kiếm phù hợp đòi hỏi phải cân nhắc kỹ lưỡng về độ phức tạp thời gian tìm kiếm và không gian.

2.2. Hạn chế về Kích thước cố định của Mảng và cách khắc phục

Kích thước cố định của mảng là một hạn chế lớn trong các ứng dụng dữ liệu động. Để khắc phục hạn chế này, có thể sử dụng mảng động, cho phép thay đổi kích thước trong quá trình thực thi. Tuy nhiên, việc thay đổi kích thước mảng động có thể gây ra chi phí lớn về thời gian và bộ nhớ do phải cấp phát lại và sao chép dữ liệu. Một giải pháp khác là sử dụng các cấu trúc dữ liệu linh hoạt hơn như danh sách liên kết.

III. Phương Pháp Tìm Kiếm Tuyến Tính Nhị Phân trên Mảng Cách dùng

Trên mảng, có hai phương pháp tìm kiếm chính: tìm kiếm tuyến tínhtìm kiếm nhị phân. Tìm kiếm tuyến tính duyệt qua từng phần tử của mảng cho đến khi tìm thấy phần tử cần tìm hoặc duyệt hết mảng. Ưu điểm của phương pháp này là dễ cài đặt và không yêu cầu mảng phải được sắp xếp. Tuy nhiên, độ phức tạp thời gian là O(n), không hiệu quả với mảng lớn. Tìm kiếm nhị phân, ngược lại, yêu cầu mảng phải được sắp xếp trước. Phương pháp này liên tục chia đôi khoảng tìm kiếm, so sánh phần tử ở giữa khoảng với giá trị cần tìm. Với mỗi lần so sánh, khoảng tìm kiếm giảm đi một nửa, dẫn đến độ phức tạp thời gian O(log n), rất hiệu quả với mảng lớn.

3.1. Hướng dẫn chi tiết Tìm kiếm Tuyến tính trên Mảng

Tìm kiếm tuyến tính là phương pháp đơn giản nhất, duyệt qua từng phần tử của mảng từ đầu đến cuối. Mã giả: 1. Bắt đầu từ phần tử đầu tiên của mảng. 2. So sánh phần tử hiện tại với giá trị cần tìm. 3. Nếu trùng khớp, trả về chỉ số của phần tử. 4. Nếu không trùng khớp, chuyển sang phần tử tiếp theo. 5. Lặp lại bước 2-4 cho đến khi tìm thấy hoặc duyệt hết mảng. Nếu duyệt hết mảng mà không tìm thấy, trả về giá trị -1 hoặc thông báo không tìm thấy.

3.2. Bí quyết Tìm kiếm Nhị phân hiệu quả trên Mảng đã sắp xếp

Tìm kiếm nhị phân yêu cầu mảng đã được sắp xếp theo thứ tự tăng dần hoặc giảm dần. Mã giả: 1. Xác định khoảng tìm kiếm: left = 0, right = n - 1 (n là kích thước mảng). 2. Tính chỉ số phần tử ở giữa: mid = (left + right) / 2. 3. So sánh a[mid] với giá trị cần tìm: a. Nếu a[mid] == giá trị cần tìm, trả về mid. b. Nếu a[mid] < giá trị cần tìm, thu hẹp khoảng tìm kiếm: left = mid + 1. c. Nếu a[mid] > giá trị cần tìm, thu hẹp khoảng tìm kiếm: right = mid - 1. 4. Lặp lại bước 2-3 cho đến khi tìm thấy hoặc left > right. Nếu left > right, trả về giá trị -1 hoặc thông báo không tìm thấy. Theo tài liệu gốc, đồ án sử dụng Linear Search và Binary Search để tìm kiếm thông tin khách hàng theo mã khách hàng.

IV. Top Thuật Toán Sắp Xếp Mảng Nổi Bọt Chèn Chọn Trộn Nhanh

Có nhiều thuật toán sắp xếp mảng với hiệu suất và độ phức tạp khác nhau. Một số thuật toán phổ biến bao gồm: Sắp xếp nổi bọt (Bubble Sort), Sắp xếp chèn (Insertion Sort), Sắp xếp chọn (Selection Sort), Sắp xếp trộn (Merge Sort) và Sắp xếp nhanh (Quick Sort). Sắp xếp nổi bọt là thuật toán đơn giản nhất nhưng kém hiệu quả nhất với độ phức tạp thời gian O(n^2). Sắp xếp chènSắp xếp chọn cũng có độ phức tạp thời gian O(n^2), nhưng thường hiệu quả hơn Sắp xếp nổi bọt. Sắp xếp trộnSắp xếp nhanh là các thuật toán sắp xếp hiệu quả với độ phức tạp thời gian trung bình O(n log n).

4.1. So sánh chi tiết các thuật toán sắp xếp Mảng độ phức tạp

  • Sắp xếp nổi bọt (Bubble Sort): Độ phức tạp thời gian: O(n^2) (trung bình và tệ nhất), O(n) (tốt nhất - khi mảng đã được sắp xếp). * Sắp xếp chèn (Insertion Sort): Độ phức tạp thời gian: O(n^2) (trung bình và tệ nhất), O(n) (tốt nhất). * Sắp xếp chọn (Selection Sort): Độ phức tạp thời gian: O(n^2) (trung bình, tốt nhất và tệ nhất). * Sắp xếp trộn (Merge Sort): Độ phức tạp thời gian: O(n log n) (trung bình, tốt nhất và tệ nhất). * Sắp xếp nhanh (Quick Sort): Độ phức tạp thời gian: O(n log n) (trung bình), O(n^2) (tệ nhất), O(n log n) (tốt nhất). Việc lựa chọn thuật toán sắp xếp phù hợp phụ thuộc vào kích thước mảng và yêu cầu về hiệu suất.

4.2. Hướng dẫn cài đặt Sắp xếp Nhanh Quick Sort trên Mảng

Sắp xếp nhanh là thuật toán sắp xếp đệ quy, dựa trên nguyên tắc chia để trị. Mã giả: 1. Chọn một phần tử chốt (pivot) từ mảng. 2. Phân vùng mảng thành hai phần: các phần tử nhỏ hơn pivot và các phần tử lớn hơn pivot. 3. Gọi đệ quy Sắp xếp nhanh trên hai phân vùng. Việc chọn pivot ảnh hưởng lớn đến hiệu suất của thuật toán. Trong trường hợp tệ nhất (pivot là phần tử nhỏ nhất hoặc lớn nhất), độ phức tạp thời gian có thể lên tới O(n^2). Tuy nhiên, với cách chọn pivot ngẫu nhiên, độ phức tạp thời gian trung bình là O(n log n). Theo tài liệu gốc, đồ án sử dụng Shaker Sort, Selection Sort, Interchange Sort, Bubble Sort, Insertion Sort, Quick Sort và Merge Sort để sắp xếp danh sách khách hàng theo mã khách hàng.

V. Tìm Kiếm Sắp Xếp Hiệu Quả trên Danh Sách Liên Kết

Việc tìm kiếmsắp xếp trên danh sách liên kết có những đặc điểm riêng so với mảng do cấu trúc dữ liệu khác nhau. Tìm kiếm trên danh sách liên kết thường được thực hiện bằng phương pháp tìm kiếm tuyến tính, vì không thể truy cập phần tử bằng chỉ số. Các thuật toán sắp xếp thường được sử dụng trên danh sách liên kết bao gồm sắp xếp chèn, sắp xếp chọn, và sắp xếp trộn. Việc lựa chọn thuật toán phụ thuộc vào kích thước danh sách và yêu cầu về độ phức tạp thuật toán.

5.1. Thuật toán Tìm kiếm Tuyến tính trên Danh sách liên kết

Do đặc tính truy cập tuần tự, tìm kiếm tuyến tính là lựa chọn phổ biến cho danh sách liên kết. Mã giả: 1. Bắt đầu từ phần tử đầu tiên (head) của danh sách. 2. So sánh dữ liệu của phần tử hiện tại với giá trị cần tìm. 3. Nếu trùng khớp, trả về con trỏ đến phần tử. 4. Nếu không trùng khớp, di chuyển đến phần tử tiếp theo. 5. Lặp lại bước 2-4 cho đến khi tìm thấy hoặc duyệt hết danh sách. Nếu duyệt hết danh sách mà không tìm thấy, trả về NULL.

5.2. Các phương pháp Sắp xếp Danh sách liên kết Selection Sort

Các thuật toán như sắp xếp chènsắp xếp chọn có thể được điều chỉnh để làm việc hiệu quả trên danh sách liên kết. Sắp xếp chọn trên danh sách liên kết hoạt động bằng cách tìm phần tử nhỏ nhất trong danh sách, hoán đổi nó với phần tử đầu tiên, sau đó lặp lại quá trình với phần còn lại của danh sách. Theo tài liệu gốc, đồ án sử dụng Selection Sort và Quick Sort để sắp xếp thông tin khách hàng trên danh sách liên kết.

VI. Ứng Dụng Thực Tế và Nghiên Cứu về Tìm Kiếm Sắp Xếp

Các thuật toán tìm kiếmsắp xếp được áp dụng rộng rãi trong nhiều lĩnh vực khác nhau. Trong các hệ quản trị cơ sở dữ liệu, chúng được sử dụng để tìm kiếmsắp xếp dữ liệu một cách hiệu quả. Trong các công cụ tìm kiếm trên web, chúng đóng vai trò quan trọng trong việc lập chỉ mục và xếp hạng kết quả tìm kiếm. Trong các ứng dụng phân tích dữ liệu, chúng được sử dụng để phân loại và nhóm dữ liệu. Ngoài ra, các thuật toán tìm kiếmsắp xếp cũng được sử dụng trong các lĩnh vực như trí tuệ nhân tạo, học máy và khoa học dữ liệu.

6.1. Ví dụ về ứng dụng Tìm kiếm trong Quản lý dữ liệu khách hàng

Trong một hệ thống quản lý dữ liệu khách hàng (CRM), các thuật toán tìm kiếm được sử dụng để nhanh chóng tìm kiếm thông tin khách hàng dựa trên nhiều tiêu chí khác nhau, như tên, địa chỉ, số điện thoại, hoặc lịch sử giao dịch. Việc tìm kiếm hiệu quả giúp nhân viên hỗ trợ khách hàng nhanh chóng truy cập thông tin cần thiết, cải thiện trải nghiệm khách hàng.

6.2. Ứng dụng của Sắp xếp trong các hệ thống thương mại điện tử

Trong các hệ thống thương mại điện tử, các thuật toán sắp xếp được sử dụng để sắp xếp sản phẩm theo nhiều tiêu chí khác nhau, như giá cả, mức độ phổ biến, đánh giá của khách hàng. Việc sắp xếp sản phẩm giúp khách hàng dễ dàng tìm thấy sản phẩm phù hợp với nhu cầu và sở thích của họ.

22/09/2025

Trích đoạn nội dung tài liệu

CHƯƠNG 1. Giới thiệu đề bài Xây dựng chức năng tìm kiếm và sắp xếp trên các cấu trúc và danh sách liên kết hỗ trợ quản lý thông tin khách hàng thân thiết bao gồm: Mã khách hàng(MaKH), Họ (Ho), Tên (Ten), Năm (Nam), Điểm tích luỹ đang có (Diem), Doanh số mua hàng (Doanhso). Cấu trúc Thông tin khách hàng cần quản lý gồm: MaKH: Mã khách hàng, gồm 1 chuỗi ký tự số có chiều dài 4 ký tự. Ho: Họ và tên chữ lót, chỉ định quản lý các tên tiếng Việt với chiều dài mỗi chữ khoảng 7 ký tự.

Ten: Tên, chỉ gồm 1 chữ Việt với chiều dài tối đa khoảng 7 ký tự. Nam: Năm, gồm 1 chuỗi ký tự số có chiều dài 4 ký tự. Diem: Điểm tích luỹ đang có, ghi nhận điểm tích luỹ của các khách hàng. Doanhso: Doanh số mua hàng, ghi nhận doanh số mua hàng của khách hàng.

Tính theo đơn vị Việt Nam đồng( ngàn đồng ) Cấu trúc dữ liệu hỗ trợ quản lý thông tin khách hàng: MaKH: chuỗi gồm 4 ký tự số. Ho: chuỗi tối đa 30 ký tự. Ten: Chuỗi tối đa 8 ký tự. Nam: chuỗi gồm 4 ký tự số.

Diem: số nguyên không âm (Diem>=0) Doanhso: số thực dương ( ngàn đồng ) Định nghĩa cấu trúc khách hàng: 6 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân struct KhachHang { char MaKH[5]; char Ho[30]; char Ten[8]; char Nam[5]; int Diem; float Doanhso; }kh; 1. Dữ liệu mẫu (>=10 thông tin đối tượng cần xử lý) Bảng 1.1 bảng thông tin khách hàng. STT MaKH Họ đệm Tên Năm Điểm Doanh số 1 2101 Le Tran Thuy 2019 15 8000(đ) 2 2104 Nguyen Binh An 2018 17 15000(đ) 3 2205 Tran Thi Chau 2021 14 6000(đ) 4 1999 Cao Thanh Than 2022 16 11000(đ) h 5 2108 Nguyễn Quỳnh Như 2021 19 12500(đ) 6 2213 Lâm thị Hà 2017 17 13450(đ) 7 2097 Đoàn Như Trúc 2018 18 20000(đ) 8 1978 Vũ Khánh Linh 2019 20 17000(đ) 9 2053 Hồ Hoàng Mai 2022 14 13000(đ) 10 2212 Nguyễn Văn Sơn 2017 16 15672(đ) 7 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân 1. Các chức năng ( liệt kê chức năng sẽ xây dựng) Các chức năng mkng cấu trúc  Nhập danh sách khách hàng  Xuất danh sách khách hàng  Tìm thông tin khách hàng theo mã khách hàng ( dùng Linear Search và Binary Search)  Sắp xếp danh sách theo mã khách hàng ( dùng Shaker Sort )  Sắp xếp danh sách theo mã khách hàng ( dùng Selection Sort )  Sắp xếp danh sách theo mã khách hàng ( dùng Interchange Sort )  Sắp xếp danh sách theo mã khách hàng ( dùng Bubble Sort )  Sắp xếp danh sách theo mã khách hàng ( dùng Insertion Sort )  Sắp xếp danh sách theo mã khách hàng ( dùng Quick Sort )  Sắp xếp danh sách theo mã khách hàng ( dùng Merge Sort ) Các chức năng mkng dslk  Nhập danh sách khách hàng  Xuất danh sách khách hàng  Đếm số khách hàng có trong danh sách  Tìm thông tin khách hàng  Sắp xếp thông tin khách hàng ( dùng Selection Sort )  Sắp xếp thông tin khách hàng ( dùng Quick Sort ) 8 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân CHƯƠNG 2.

TÌM KIẾM VÀ SẮP XẾP TRÊN MẢNG CẤU TRÚC 2. Nhập danh sách khách hàng 2. Chương trình con Để nhập danh sách khách hàng, cần xây dựng hai chương trình con gồm:  void nhapKH(KhachHang &kh): hỗ trợ nhập thông tin 1 khách hàng gồm mã khách hàng, họ, tên, năm quản lý, điểm tích luỹ, doanh số.  void nhapdsKH( KhachHang a[], int &n): hỗ trợ nhập danh sách khách hàng.

//ctc nhập ô cấu trúc void nhapKH(KhachHang kh) { rewind(stdin); cout<<" nhap ma khach hang: "; cin.MaKH,5); cout<<" nhap ho: "; cin.Ho, 30); cout<<" nhap ten: "; cin.Ten, 8); cout<<" nhap nam quan ly: "; cin.Nam, 5); cout<<" nhap diem tich luy: "; 9 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân cin>>kh.Diem; cout<<" nhap doanh so: "; cin>>kh.ignore(); } //ctc nhập mảng cấu trúc void nhapdsKH( KhachHang a[], int n) { for(int i=0;i<n;i++) { cout<<" nhap thong tin khach hang thu "<<i<<": "<<endl; nhapKH(a[i]); cout<<endl; } } 10 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân 2. Kết quk chạy H2nh 2.1: H2nh ảnh kết quả chạy của chương tr2nh con nhập danh sách khách hàng 2. Xuất danh sách khách hàng 2. Chương trình con Để xuất danh sách khách hàng, cần xây dựng hai chương trình con gồm:  void xuatKH(KhachHang kh): hỗ trợ xuất thông tin 1 khách hàng gồm mã khách hàng, họ, tên, năm quản lý, điểm tích luỹ, doanh số.

 void xuatdsKH(KhachHang a[], int n): hỗ trợ xuất danh sách khách hàng. //ctc xuất ô cấu trúc void xuatKH(KhachHang kh) { cout << "\t" << kh.MaKH; 11 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân cout << "\t" << kh.Ho; cout << " " << kh.Ten; cout << "\t" << kh.Nam; cout << "\t\t" << kh.Diem; cout << "\t\t" << kh.Doanhso; cout << endl; } //ctc xuất mảng cấu trúc void xuatdsKH(KhachHang a[], int n) { cout<<"STT\t\t"<<"maKH\t"<<"ho va ten\t\t"<<"namQL\t"<<"diemtichluy\t"<<"doanhso\t"<<endl; for(int i=0;i<n;i++) { xuatKH(a[i]); } } 2. Kết quk chạy H2nh 2.2: H2nh ảnh kết quả chạy của chương tr2nh con xuất danh sách khách hàng 12 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân 2. Tìm thông tin khách hàng theo mã khách hàng ( dùng Linear Search và Binary Search) 2.

Chương trình con Để tìm thông tin khách hàng theo mã khách hàng, có thể dùng 2 cách Linear Search và Binary Search:  int linearSearch(KhachHang a[], int n, char x[]): tìm kiếm tuyến tính.  Int BinarySearch(KhachHang a[], int n, char x[]): tìm kiếm nhị phân. T2m thông tin khách hàng theo mã khách hàng bằng Linear Search: //ctc tìm thông tin khách hàng theo mã khách hàng int linearSearch(KhachHang a[], int n, char x[]) { for(int i=0;i<n;i++) { // nếu tìm thấy mã khách hàng thì xuất thông tin khách hàng có cùng mã cần tìm và trả về 0 if (strcmp(a[i].MaKH, x)==0) { cout<<" khach hang can tim la: "<<endl; cout<<"\tmaKH\t"<<"ho va ten\t\t"<<"namQL\t"<<"diemtichluy\t"<<"doanhso\t"<<endl; xuatKH(a[i]); return 0; } 13 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân } return -1;//nếu không tìm thấy mã khách hàng thì trả về -1 } 2. Kết quk chạy H2nh 2.3: H2nh ảnh kết quả chạy của chương tr2nh con linear search theo mã khách hàng T2m thông tin khách hàng theo mã khách hàng bằng Binary Search: // ham tim kiem ma khach hang dung binarysearch int BinarySearch(KhachHang a[], int n, char x[]) { int left=0;// gan left bang vi tri dau int right =n-1;// gan right bang vi tri cuoi int mid=(left+right)/2; // vi tri giua bang trung binh cong cua left va right ShakerSort(a, n); // sap xep lai ma khach hang tu thap den cao while (left<=right && strcmp(a[mid].MaKH, x)!=0) // lap neu left<=right va ma khach hang tai vi tri giua khac ma khach hang can tim 14 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân { if (strcmp(x, a[mid].MaKH)<0) // neu ma khach hang tai vi tri giua lon hon x right=mid-1; // doi bien right ve vi tri mid-1 Else // neu ma khach hang tai vi tri giua nho hon x left=mid+1; // doi bien left ve vi tri mid+1 mid=(left+right)/2; // tinh lai bien mid sau khi bien right hoac left thay doi } if (left>right)// neu thoat khoi vong lap vi left > right { cout<<" khong ton tai khach hang nay!!! "; return -1;// tra ve gia tri -1 } Else // neu thoat khoi vong lap vi tim thay ma khach hang can tim cout<<"\tmaKH\t"<<"ho va ten\t\t"<<"namQL\t"<<"diemtichluy\t"<<"doanhso\t"<<endl; xuatKH(a[mid]);// xuat thong tin khach hang 15 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân return 0;// tra ve gia tri 0 } 2.

Kết quk chạy H2nh 2.4: h2nh ảnh kết quả chạy của chương tr2nh con binary search theo mã khách hàng 2. Sắp xếp danh sách khách hàng theo mã khách hàng: 2. Kết quk khi chưa sắp xếp: H2nh 2.5: H2nh ảnh danh sách khách hàng khi chưa được sắp xếp. Chương trình con Để sắp xếp danh sách khách hàng theo mã khách hàng, có thể dùng: + Shaker Sort: void ShakerSort(KhachHang a[], int n) + Selection Sort: void SelectionSort(KhachHang a[], int n) + Interchange Sort: void InterchangeSort(KhachHang a[], int n) + Bubble Sort: void BubbleSort(KhachHang a[], int n) 16 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân + Insertion Sort: void InsertionSort(KhachHang a[],int n) + QuickSort Sort: void QuickSort(KhachHang a[], int left, int right) + Merge Sort: void mergesort (KhachHang a[], int n) Sắp xếp danh sách theo mã khách hàng ( dùng Shaker Sort ): // ctc sap xep danh sach theo ma khach hang dùng ShakerSort void ShakerSort(KhachHang a[], int n) { int first=0;// gán first bằng phan tu đầu tiên int last =n-1;// gán last bằng phan tu cuối cùng int k=n-1; // số k gán bằng với khách hàng cuối cùng while(first<last)// lặp lại nếu first < last { for(int i=last; i>first;i--)// lap i di tu last ve first if(strcmp(a[i-1].MaKH)>0) { hoanvi(a[i-1],a[i]); // neu ma cua khach hang i-1 lon hon ma cua khach hang i thi doi cho 2 khach hang k=i;// dua so k ve vi tri i }first=k;// vi tri first luc nay duoc gan bang k 17 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân for(int j=first; j<last;j++) // lap j di tu first den last if(strcmp(a[j].MaKH)>0) { hoanvi(a[j],a[j+1]); // neu ma khach hang j lon hon ma cua khach hang j+1 thi doi cho 2 khach hang k=j;// dua so k ve vi tri j }last=k;// vi tri last luc nay duoc gan bang k } } 2.

Kêt quk chạy dùng Shaker Sort H2nh 2.6: H2nh ảnh danh sách khách hàng sau khi sắp xếp ( dùng shaker sort ) theo mã khách hàng Sắp xếp danh sách theo mã khách hàng ( dùng Selection Sort ): // ctc sap xep danh sach khach hang theo ma khach hang dung selectionsort 18 0 0 TIEU LUAN MOI download : skknchat123@gmail.com moi nhat Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân void SelectionSort(KhachHang a[], int n) { int min; for (int i = 0; i < n - 1; i++) { min = i;// gan min bang i for (int j = i + 1; j < n; j++)// lap tu vi tri i+1 den cuoi danh sach if (strcmp(a[j].

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ