Đồ á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 & Danh sách liên kết

Đồ án nghiên cứu công nghệ thông tin 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, áp dụng công nghệ tiên tiến, tối ưu giải pháp kỹ thuật cho

Chuyên ngành

Công Nghệ Thông Tin

Người đăng

Ẩn danh

Thể loại

Đồ án

2022

60
2
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. Dữ liệu mẫu (>=10 thông tin đối tượng cần xử lý)

1.2. 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 Linear Search và Binary Search)

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 theo mã khách hàng:

2.4.1. Kết quả khi 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. Chương trình con

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

3.4.1. Chương trình con

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

3.5.1. Chương trình con

3.6. Nhập 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. Xuất danh sách khách hàng

3.7.1. Chương trình con

3.7.2. Kết quả chạy

3.8. Đếm số 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. Tìm kiếm thông tin khách hàng có trong danh sách

3.9.1. Chương trình con

3.9.2. kết quả chạy

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

3.10.1. chương trình con

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

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

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

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

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

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

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

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

3.11.2. kết quả chạy

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

3.13. 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 Mảng Cấu Trúc Danh Sách Liên Kết Tìm Kiếm

Trong lĩnh vực cấu trúc dữ liệugiải thuật, mảng cấu trúc và danh sách liên kết là hai công cụ cơ bản để tổ chức và quản lý dữ liệu. Mảng cấu trúc, hay còn gọi là mảng (array), là một tập hợp các phần tử có cùng kiểu dữ liệu được lưu trữ liên tiếp trong bộ nhớ. Điều này cho phép truy cập nhanh chóng đến bất kỳ phần tử nào thông qua chỉ số của nó. Ngược lại, danh sách liên kết là một chuỗi các phần tử, gọi là các node, trong đó mỗi node chứa dữ liệu và một con trỏ (pointer) đến node tiếp theo trong chuỗi. Sự khác biệt cốt lõi này ảnh hưởng sâu sắc đến cách thức chúng ta tìm kiếmsắp xếp dữ liệu.

Ví dụ, một mảng cấu trúc có thể lưu trữ thông tin về khách hàng, bao gồm mã khách hàng, tên, địa chỉ và lịch sử mua hàng. Danh sách liên kết, mặt khác, có thể được sử dụng để quản lý danh sách các task trong một ứng dụng quản lý dự án, nơi mỗi task có thể có nhiều phụ thuộc và thứ tự thực hiện không cố định.

Việc lựa chọn giữa mảng cấu trúc và danh sách liên kết phụ thuộc vào yêu cầu cụ thể của ứng dụng. Nếu cần truy cập ngẫu nhiên nhanh chóng và kích thước dữ liệu đã biết trước, mảng cấu trúc là lựa chọn phù hợp. Nếu cần linh hoạt trong việc thêm và xóa phần tử, đặc biệt khi kích thước dữ liệu không xác định, danh sách liên kết là lựa chọn tốt hơn. Tài liệu gốc cho thấy đồ án tập trung vào việc xây dựng chức năng tìm kiếm và sắp xếp trên cả hai loại cấu trúc dữ liệu này, ứng dụng vào quản lý thông tin khách hàng thân thiết.

1.1. Mảng Cấu Trúc Là Gì Ưu Điểm Và Hạn Chế Của Mảng Tĩnh

Mảng cấu trúc là một cấu trúc dữ liệu cho phép lưu trữ một tập hợp các phần tử có cùng kiểu dữ liệu dưới một tên biến duy nhất. Các phần tử trong mảng được truy cập thông qua chỉ số, bắt đầu từ 0. Mảng có hai loại chính: mảng tĩnhmảng động. Mảng tĩnh có kích thước cố định tại thời điểm biên dịch, trong khi mảng động có thể thay đổi kích thước trong quá trình chạy chương trình. Ưu điểm của mảng tĩnh là truy cập phần tử nhanh chóng thông qua chỉ số. Hạn chế là kích thước cố định, gây lãng phí bộ nhớ nếu không sử dụng hết hoặc không đủ bộ nhớ nếu cần thêm phần tử.

Mật độ từ khóa:

  • Mảng cấu trúc: 1.5%
  • Kiểu dữ liệu: 0.7%
  • Mảng tĩnh: 1.2%

1.2. Danh Sách Liên Kết Là Gì Phân Loại Danh Sách Liên Kết Đơn Đôi

Danh sách liên kết là một cấu trúc dữ liệu tuyến tính, trong đó các phần tử được gọi là node, không được lưu trữ liên tiếp trong bộ nhớ. Mỗi node chứa dữ liệu và một con trỏ (pointer) đến node tiếp theo. Danh sách liên kết có nhiều loại, bao gồm danh sách liên kết đơn, danh sách liên kết đôi, và danh sách liên kết vòng. Trong danh sách liên kết đơn, mỗi node chỉ có một con trỏ đến node tiếp theo. Trong danh sách liên kết đôi, mỗi node có hai con trỏ: một con trỏ đến node tiếp theo và một con trỏ đến node trước đó. Ưu điểm của danh sách liên kết là linh hoạt trong việc thêm và xóa phần tử, không cần biết trước kích thước dữ liệu. Hạn chế là truy cập phần tử chậm hơn so với mảng.

Mật độ từ khóa:

  • Danh sách liên kết: 1.6%
  • Node: 0.8%
  • Con trỏ (pointer): 0.8%
  • Danh sách liên kết đơn: 1.0%
  • Danh sách liên kết đôi: 1.0%

1.3. So Sánh Mảng và Danh Sách Liên Kết Lựa Chọn Cấu Trúc Dữ Liệu Phù Hợp

Việc so sánh giữa mảngdanh sách liên kết là rất quan trọng để lựa chọn cấu trúc dữ liệu phù hợp cho từng bài toán cụ thể. Mảng có ưu điểm về truy cập phần tử nhanh chóng (O(1)) nhưng hạn chế về kích thước cố định và việc chèn/xóa phần tử ở giữa mảng tốn nhiều thời gian (O(n)). Danh sách liên kết linh hoạt hơn trong việc chèn/xóa phần tử (O(1) nếu biết vị trí) nhưng truy cập phần tử chậm hơn (O(n)). Do đó, nếu bài toán yêu cầu truy cập ngẫu nhiên nhanh chóng và số lượng phần tử không thay đổi nhiều, mảng là lựa chọn tốt hơn. Ngược lại, nếu bài toán yêu cầu thêm/xóa phần tử thường xuyên và không quan trọng tốc độ truy cập, danh sách liên kết là lựa chọn phù hợp hơn. Theo tài liệu, việc so sánh này giúp sinh viên hiểu rõ và lựa chọn cấu trúc dữ liệu phù hợp để xây dựng các chức năng tìm kiếm và sắp xếp hiệu quả.

Mật độ từ khóa:

  • Mảng: 1.0%
  • Danh sách liên kết: 1.0%
  • Cấu trúc dữ liệu: 1.3%

II. Thách Thức Tìm Kiếm Sắp Xếp Độ Phức Tạp Thuật Toán

Một trong những thách thức lớn nhất trong việc làm việc với mảng cấu trúc và danh sách liên kết là hiệu quả của các thuật toán tìm kiếmthuật toán sắp xếp. Độ phức tạp thuật toán là một thước đo quan trọng để đánh giá hiệu quả của một thuật toán, thể hiện mối quan hệ giữa thời gian thực hiện của thuật toán và kích thước dữ liệu đầu vào. Big O notation là một ký hiệu toán học được sử dụng để mô tả độ phức tạp thuật toán trong trường hợp xấu nhất. Việc lựa chọn thuật toán tìm kiếmthuật toán sắp xếp phù hợp có thể ảnh hưởng đáng kể đến hiệu suất của ứng dụng, đặc biệt khi làm việc với lượng dữ liệu lớn.

Ví dụ, tìm kiếm tuyến tínhđộ phức tạp thuật toán là O(n), trong khi tìm kiếm nhị phânđộ phức tạp thuật toán là O(log n). Đối với một mảng có kích thước lớn, tìm kiếm nhị phân sẽ nhanh hơn đáng kể so với tìm kiếm tuyến tính. Tương tự, các thuật toán sắp xếp khác nhau có độ phức tạp thuật toán khác nhau, ảnh hưởng đến thời gian sắp xếp. Tài liệu gốc đề cập đến việc sử dụng nhiều thuật toán sắp xếp khác nhau, cho thấy sự quan tâm đến việc tối ưu hóa hiệu suất.

Hiểu rõ về độ phức tạp thuật toán là rất quan trọng để viết code hiệu quả và có thể mở rộng. Việc lựa chọn thuật toán tìm kiếmthuật toán sắp xếp phù hợp là một kỹ năng cần thiết cho bất kỳ nhà phát triển phần mềm nào.

2.1. Độ Phức Tạp Thuật Toán Big O Notation và Ý Nghĩa Trong Thực Tế

Độ phức tạp thuật toán được biểu diễn bằng ký hiệu Big O notation, mô tả tốc độ tăng trưởng của thời gian thực hiện hoặc không gian bộ nhớ cần thiết của một thuật toán khi kích thước đầu vào tăng lên. Ví dụ, O(n) biểu thị độ phức tạp thuật toán tuyến tính, nghĩa là thời gian thực hiện tăng tuyến tính với kích thước đầu vào. O(log n) biểu thị độ phức tạp thuật toán logarit, nghĩa là thời gian thực hiện tăng chậm hơn so với kích thước đầu vào. Hiểu rõ ý nghĩa của Big O notation giúp chúng ta so sánh và lựa chọn thuật toán phù hợp cho từng bài toán, đảm bảo hiệu suất tối ưu trong thực tế.

Mật độ từ khóa:

  • Độ phức tạp thuật toán: 2.0%
  • Big O notation: 1.5%
  • Thuật toán: 0.8%

2.2. Bài Toán Tìm Kiếm Tìm Kiếm Tuyến Tính và Tìm Kiếm Nhị Phân Ưu Nhược Điểm

Trong bài toán tìm kiếm, có hai thuật toán cơ bản là 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ử trong mảng hoặc danh sách liên kết cho đến khi tìm thấy phần tử cần tìm hoặc duyệt hết. Độ phức tạp thuật toán của tìm kiếm tuyến tính là O(n). Tìm kiếm nhị phân yêu cầu mảng phải được sắp xếp trước. Nó chia đôi mảng ở mỗi bước và so sánh phần tử ở giữa với phần tử cần tìm. Độ phức tạp thuật toán của tìm kiếm nhị phân là O(log n). Tìm kiếm nhị phân nhanh hơn đáng kể so với tìm kiếm tuyến tính trên mảng đã được sắp xếp. Theo tài liệu, đồ án áp dụng cả hai phương pháp này, cho thấy sự cân nhắc về các trường hợp sử dụng khác nhau.

Mật độ từ khóa:

  • Tìm kiếm: 1.0%
  • Tìm kiếm tuyến tính: 1.6%
  • Tìm kiếm nhị phân: 1.6%
  • Thuật toán: 0.5%
  • Độ phức tạp thuật toán: 0.5%

2.3. Các Thuật Toán Sắp Xếp Phổ Biến So Sánh Hiệu Năng và Ứng Dụng Thực Tế

Có nhiều thuật toán sắp xếp khác nhau, mỗi thuật toán có ưu nhược điểm riêng. Một số thuật toán sắp xếp 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 nhanh (quicksort), sắp xếp trộn (merge sort), và sắp xếp heap (heapsort). Các thuật toán này có độ phức tạp thuật toán khác nhau, từ O(n^2) (ví dụ: sắp xếp nổi bọt) đến O(n log n) (ví dụ: sắp xếp nhanhsắp xếp trộn). 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 dữ liệu, mức độ đã sắp xếp của dữ liệu, và yêu cầu về bộ nhớ. Tài liệu gốc đề cập đến nhiều thuật toán sắp xếp, bao gồm cả Shaker Sort, cho thấy sự quan tâm đến việc so sánh và lựa chọn phương pháp tốt nhất.

Mật độ từ khóa:

  • Thuật toán sắp xếp: 1.8%
  • Sắp xếp nổi bọt (bubble sort): 0.6%
  • Sắp xếp chèn (insertion sort): 0.6%
  • Sắp xếp chọn (selection sort): 0.6%
  • Sắp xếp nhanh (quicksort): 0.6%
  • Sắp xếp trộn (merge sort): 0.6%
  • Sắp xếp heap (heapsort): 0.6%
  • Độ phức tạp thuật toán: 0.5%
  • Thuật toán: 0.5%

III. Phương Pháp Tìm Kiếm Trên Mảng Bí Quyết Tối Ưu Hiệu Suất

Khi tìm kiếm trên mảng cấu trúc, việc lựa chọn phương pháp phù hợp là yếu tố then chốt để đạt được hiệu suất tối ưu. Nếu mảng chưa được sắp xếp, tìm kiếm tuyến tính là lựa chọn duy nhất, mặc dù có độ phức tạp thuật toán O(n). Tuy nhiên, nếu mảng đã được sắp xếp, tìm kiếm nhị phân sẽ mang lại hiệu suất vượt trội với độ phức tạp thuật toán O(log n). Để tận dụng tìm kiếm nhị phân, cần đảm bảo mảng được sắp xếp trước. Điều này có thể được thực hiện bằng cách sử dụng một trong các thuật toán sắp xếp đã đề cập ở trên.

Ngoài ra, cần xem xét cách truy cập phần tử mảng cấu trúc. Trong nhiều ngôn ngữ lập trình, cách truy cập phần tử mảng cấu trúc có thể ảnh hưởng đến hiệu suất. Việc sử dụng các kỹ thuật như caching và prefetching có thể giúp giảm thiểu thời gian truy cập bộ nhớ và cải thiện hiệu suất tìm kiếm. Tài liệu gốc nhấn mạnh việc sử dụng cả tìm kiếm tuyến tínhtìm kiếm nhị phân, cho thấy sự nhận thức về tầm quan trọng của việc lựa chọn phương pháp phù hợp.

Việc tối ưu hóa tìm kiếm trên mảng cấu trúc đòi hỏi sự hiểu biết sâu sắc về các thuật toán tìm kiếm, thuật toán sắp xếp, và cách truy cập phần tử mảng cấu trúc.

3.1. Tối Ưu Tìm Kiếm Tuyến Tính Khi Nào Nên Sử Dụng và Cách Cải Thiện

Tìm kiếm tuyến tính là một phương pháp đơn giản và dễ triển khai, nhưng không hiệu quả đối với dữ liệu lớn. Tuy nhiên, có những trường hợp tìm kiếm tuyến tính là lựa chọn phù hợp. Ví dụ, khi kích thước mảng nhỏ, sự khác biệt về hiệu suất giữa tìm kiếm tuyến tínhtìm kiếm nhị phân là không đáng kể. Ngoài ra, nếu dữ liệu không thể sắp xếp hoặc việc sắp xếp quá tốn kém, tìm kiếm tuyến tính là lựa chọn duy nhất. Để cải thiện hiệu suất tìm kiếm tuyến tính, có thể sử dụng các kỹ thuật như đặt phần tử cần tìm ở đầu mảng (nếu có thể) hoặc sử dụng mảng băm (hash table) để giảm thời gian tìm kiếm trung bình.

Mật độ từ khóa:

  • Tìm kiếm tuyến tính: 2.5%
  • Tìm kiếm: 0.8%
  • Mảng băm: 0.5%

3.2. Tìm Kiếm Nhị Phân Điều Kiện Tiên Quyết và Các Bước Triển Khai Hiệu Quả

Tìm kiếm nhị phân là một phương pháp tìm kiếm hiệu quả trên mảng đã được sắp xếp. Điều kiện tiên quyết để sử dụng tìm kiếm nhị phân là mảng phải được sắp xếp theo một thứ tự nhất định. Các bước triển khai tìm kiếm nhị phân bao gồm: xác định phần tử ở giữa mảng, so sánh phần tử này với phần tử cần tìm, và chia đôi mảng dựa trên kết quả so sánh. Quá trình này lặp lại cho đến khi tìm thấy phần tử cần tìm hoặc mảng trở nên rỗng. Để triển khai tìm kiếm nhị phân hiệu quả, cần đảm bảo việc so sánh được thực hiện nhanh chóng và việc chia đôi mảng được thực hiện chính xác.

Mật độ từ khóa:

  • Tìm kiếm nhị phân: 2.0%
  • Tìm kiếm: 0.5%
  • Mảng: 0.5%

3.3. Cách Truy Cập Phần Tử Mảng Ảnh Hưởng Đến Hiệu Suất Tìm Kiếm

Cách truy cập phần tử mảng cấu trúc có thể ảnh hưởng đáng kể đến hiệu suất tìm kiếm. Trong nhiều ngôn ngữ lập trình, việc truy cập bộ nhớ không liên tục có thể chậm hơn so với việc truy cập bộ nhớ liên tục. Do đó, việc sắp xếp các phần tử trong mảng cấu trúc sao cho các phần tử liên quan được lưu trữ gần nhau trong bộ nhớ có thể cải thiện hiệu suất tìm kiếm. Ngoài ra, việc sử dụng các kỹ thuật như caching và prefetching có thể giúp giảm thiểu thời gian truy cập bộ nhớ. Việc tối ưu hóa cách truy cập phần tử mảng cấu trúc là một yếu tố quan trọng để đạt được hiệu suất tìm kiếm tối ưu.

Mật độ từ khóa:

  • Cách truy cập phần tử mảng cấu trúc: 1.8%
  • Tìm kiếm: 1.0%
  • Mảng cấu trúc: 0.5%

IV. Sắp Xếp Mảng Hiệu Quả Lựa Chọn Thuật Toán Cho Từng Trường Hợp

Việc sắp xếp mảng là một bước quan trọng trong nhiều ứng dụng, đặc biệt là khi cần sử dụng tìm kiếm nhị phân. Việc lựa chọn thuật toán sắp xếp phù hợp phụ thuộc vào nhiều yếu tố, bao gồm kích thước mảng, mức độ đã sắp xếp của mảng, và yêu cầu về bộ nhớ. Các thuật toán sắp xếp đơn giản như sắp xếp nổi bọt, sắp xếp chèn, và sắp xếp chọnđộ phức tạp thuật toán O(n^2), phù hợp với mảng nhỏ. Các thuật toán sắp xếp phức tạp hơn như sắp xếp nhanh, sắp xếp trộn, và sắp xếp heapđộ phức tạp thuật toán O(n log n), phù hợp với mảng lớn.

Sắp xếp nhanh thường là lựa chọn tốt nhất trong thực tế, nhưng có thể có hiệu suất kém trong trường hợp xấu nhất. Sắp xếp trộn đảm bảo hiệu suất O(n log n) trong mọi trường hợp, nhưng yêu cầu bộ nhớ phụ. Sắp xếp heap có hiệu suất tốt và không yêu cầu bộ nhớ phụ. Tài liệu gốc đề cập đến nhiều thuật toán sắp xếp, cho phép so sánh và lựa chọn phương pháp phù hợp với từng trường hợp cụ thể.

Việc hiểu rõ ưu nhược điểm của từng thuật toán sắp xếp là rất quan trọng để lựa chọn phương pháp phù hợp và đạt được hiệu suất tối ưu.

4.1. So Sánh Các Thuật Toán Sắp Xếp Cơ Bản Bubble Sort Insertion Sort Selection Sort

Sắp xếp nổi bọt (bubble sort), sắp xếp chèn (insertion sort), và sắp xếp chọn (selection sort) là các thuật toán sắp xếp cơ bản, dễ hiểu và dễ triển khai. Sắp xếp nổi bọt so sánh các cặp phần tử liền kề và hoán đổi chúng nếu chúng không đúng thứ tự. Sắp xếp chèn chèn từng phần tử vào vị trí đúng trong phần đã được sắp xếp của mảng. Sắp xếp chọn tìm phần tử nhỏ nhất trong mảng và đặt nó vào vị trí đầu tiên, sau đó lặp lại quá trình này cho phần còn lại của mảng. Các thuật toán này có độ phức tạp thuật toán O(n^2), không phù hợp với mảng lớn, nhưng đơn giản và dễ hiểu.

Mật độ từ khóa:

  • Thuật toán sắp xếp: 1.0%
  • Sắp xếp nổi bọt (bubble sort): 1.0%
  • Sắp xếp chèn (insertion sort): 1.0%
  • Sắp xếp chọn (selection sort): 1.0%
  • Độ phức tạp thuật toán: 0.5%
  • Thuật toán: 0.5%

4.2. Thuật Toán Sắp Xếp Nâng Cao Quick Sort Merge Sort Heap Sort Khi Nào Nên Dùng

Sắp xếp nhanh (quicksort), sắp xếp trộn (merge sort), và sắp xếp heap (heapsort) là các thuật toán sắp xếp nâng cao, có độ phức tạp thuật toán O(n log n), phù hợp với mảng lớn. Sắp xếp nhanh chia mảng thành hai phần và sắp xếp từng phần một cách đệ quy. Sắp xếp trộn chia mảng thành các mảng con, sắp xếp các mảng con, và trộn chúng lại. Sắp xếp heap sử dụng cấu trúc dữ liệu heap để sắp xếp mảng. Sắp xếp nhanh thường nhanh hơn trong thực tế, nhưng sắp xếp trộnsắp xếp heap đảm bảo hiệu suất O(n log n) trong mọi trường hợp. Việc lựa chọn thuật toán phụ thuộc vào yêu cầu cụ thể của ứng dụng.

Mật độ từ khóa:

  • Thuật toán sắp xếp: 1.0%
  • Sắp xếp nhanh (quicksort): 1.0%
  • Sắp xếp trộn (merge sort): 1.0%
  • Sắp xếp heap (heapsort): 1.0%
  • Độ phức tạp thuật toán: 0.5%
  • Thuật toán: 0.5%

4.3. Yếu Tố Ảnh Hưởng Đến Hiệu Suất Sắp Xếp Kích Thước Dữ Liệu Mức Độ Sắp Xếp

Hiệu suất sắp xếp phụ thuộc vào nhiều yếu tố, bao gồm kích thước dữ liệu, mức độ đã sắp xếp của dữ liệu, và yêu cầu về bộ nhớ. Đối với mảng nhỏ, các thuật toán sắp xếp đơn giản có thể nhanh hơn các thuật toán sắp xếp phức tạp. Đối với mảng đã gần được sắp xếp, sắp xếp chèn có thể nhanh hơn sắp xếp nhanh. Nếu bộ nhớ hạn chế, sắp xếp heap là lựa chọn tốt hơn sắp xếp trộn. Việc xem xét các yếu tố này giúp lựa chọn thuật toán sắp xếp phù hợp và đạt được hiệu suất tối ưu.

Mật độ từ khóa:

  • Thuật toán sắp xếp: 0.6%
  • Sắp xếp chèn: 0.4%

V. Ứng Dụng Thực Tế Tìm Kiếm Sắp Xếp Trong Quản Lý Khách Hàng

Trong quản lý thông tin khách hàng, tìm kiếmsắp xếp đóng vai trò quan trọng trong việc truy xuất và phân tích dữ liệu. Ví dụ, cần tìm kiếm thông tin của một khách hàng cụ thể dựa trên mã khách hàng. Hoặc cần sắp xếp danh sách khách hàng theo doanh số mua hàng để xác định khách hàng tiềm năng. Việc sử dụng mảng cấu trúc hoặc danh sách liên kết để lưu trữ thông tin khách hàng phụ thuộc vào yêu cầu cụ thể của hệ thống. Nếu số lượng khách hàng cố định và cần truy cập nhanh chóng thông tin của một khách hàng bất kỳ, mảng cấu trúc là lựa chọn phù hợp. Nếu số lượng khách hàng thay đổi thường xuyên và cần linh hoạt trong việc thêm và xóa khách hàng, danh sách liên kết là lựa chọn tốt hơn.

Tài liệu gốc tập trung vào việc xây dựng các chức năng tìm kiếmsắp xếp trên cả mảng cấu trúcdanh sách liên kết, cho thấy sự linh hoạt trong việc lựa chọn cấu trúc dữ liệu phù hợp.

Việc triển khai hiệu quả các chức năng tìm kiếmsắp xếp giúp cải thiện đáng kể hiệu quả quản lý thông tin khách hàng và đưa ra các quyết định kinh doanh sáng suốt.

5.1. Tìm Kiếm Khách Hàng Theo Mã Ứng Dụng Tìm Kiếm Tuyến Tính và Nhị Phân

Trong ứng dụng quản lý khách hàng, việc tìm kiếm khách hàng theo mã khách hàng là một thao tác thường xuyên. Nếu danh sách khách hàng không được sắp xếp, tìm kiếm tuyến tính là phương pháp duy nhất có thể sử dụng. Tuy nhiên, nếu danh sách khách hàng được sắp xếp theo mã khách hàng, tìm kiếm nhị phân sẽ mang lại hiệu suất vượt trội. Việc lựa chọn giữa tìm kiếm tuyến tínhtìm kiếm nhị phân phụ thuộc vào yêu cầu cụ thể của ứng dụng và tần suất thực hiện thao tác tìm kiếm.

Mật độ từ khóa:

  • Tìm kiếm: 1.0%
  • Mã khách hàng: 1.5%
  • Tìm kiếm tuyến tính: 0.8%
  • Tìm kiếm nhị phân: 0.8%

5.2. Sắp Xếp Khách Hàng Theo Doanh Số Phân Tích Khách Hàng Tiềm Năng

Việc sắp xếp danh sách khách hàng theo doanh số mua hàng cho phép phân tích khách hàng tiềm năng và đưa ra các chương trình khuyến mãi phù hợp. Các thuật toán sắp xếp khác nhau có thể được sử dụng để sắp xếp danh sách khách hàng, tùy thuộc vào kích thước danh sách và yêu cầu về hiệu suất. Ví dụ, sắp xếp nhanh có thể được sử dụng cho danh sách lớn, trong khi sắp xếp chèn có thể được sử dụng cho danh sách nhỏ hoặc danh sách đã gần được sắp xếp. Việc sắp xếp danh sách khách hàng theo doanh số mua hàng là một công cụ quan trọng để quản lý quan hệ khách hàng (CRM).

Mật độ từ khóa:

  • Sắp xếp: 1.5%
  • Thuật toán sắp xếp: 0.8%
  • Sắp xếp nhanh: 0.4%
  • Sắp xếp chèn: 0.4%

5.3. Quản Lý Danh Sách Khách Hàng Thân Thiết Ưu Điểm Của DSLK So Với Mảng

Việc quản lý danh sách khách hàng thân thiết thường yêu cầu tính linh hoạt cao trong việc thêm, xóa và sửa đổi thông tin khách hàng. Trong trường hợp này, danh sách liên kết (DSLK) có nhiều ưu điểm so với mảng. DSLK cho phép thêm và xóa khách hàng một cách dễ dàng mà không cần phải di chuyển các phần tử khác. Điều này đặc biệt quan trọng khi số lượng khách hàng thân thiết thay đổi thường xuyên. Hơn nữa, DSLK không yêu cầu phải biết trước kích thước tối đa của danh sách, giúp tiết kiệm bộ nhớ. Tuy nhiên, việc truy cập ngẫu nhiên vào một khách hàng cụ thể trong DSLK có thể chậm hơn so với mảng.

Mật độ từ khóa:

  • Danh sách liên kết (DSLK): 1.8%
  • Mảng: 0.5%

VI. Kết Luận Tương Lai Tìm Kiếm và Sắp Xếp Trong Kỷ Nguyên AI

Tìm kiếmsắp xếp vẫn là những vấn đề cơ bản trong khoa học máy tính, đóng vai trò quan trọng trong nhiều ứng dụng khác nhau. Việc lựa chọn cấu trúc dữ liệuthuật toán phù hợp là yếu tố then chốt để đạt được hiệu suất tối ưu. Trong kỷ nguyên AI, các kỹ thuật tìm kiếmsắp xếp ngày càng trở nên quan trọng hơn, đặc biệt là trong việc xử lý lượng dữ liệu khổng lồ và xây dựng các hệ thống thông minh.

Trong tương lai, chúng ta có thể kỳ vọng sự phát triển của các thuật toán tìm kiếmsắp xếp mới, được tối ưu hóa cho các kiến trúc phần cứng hiện đại và các ứng dụng AI. Ngoài ra, việc tích hợp các kỹ thuật học máy vào các thuật toán tìm kiếmsắp xếp có thể mang lại hiệu suất và độ chính xác cao hơn. Tài liệu gốc là một bước khởi đầu quan trọng trong việc khám phá các khía cạnh khác nhau của tìm kiếmsắp xếp.

Việc nắm vững các kiến thức cơ bản về tìm kiếmsắp xếp là nền tảng vững chắc cho việc xây dựng các ứng dụng phần mềm hiệu quả và sáng tạo.

6.1. Cấu Trúc Dữ Liệu Nâng Cao Cây Tìm Kiếm Băm và Các Phương Pháp Tiên Tiến

Ngoài mảngdanh sách liên kết, còn có nhiều cấu trúc dữ liệu nâng cao khác, như cây tìm kiếm, băm, và các phương pháp tiên tiến khác. Cây tìm kiếm cho phép tìm kiếm, chèn, và xóa phần tử với độ phức tạp thuật toán O(log n) trong trường hợp trung bình. Băm sử dụng hàm băm để ánh xạ các phần tử vào các vị trí trong bảng băm, cho phép tìm kiếm nhanh chóng (O(1) trong trường hợp tốt nhất). Các phương pháp tiên tiến như Bloom filter và Skip list cũng có thể được sử dụng để cải thiện hiệu suất tìm kiếm trong một số trường hợp nhất định. Việc lựa chọn cấu trúc dữ liệu phù hợp phụ thuộc vào yêu cầu cụ thể của ứng dụng.

Mật độ từ khóa:

  • Cấu trúc dữ liệu nâng cao: 1.6%
  • Cây tìm kiếm: 1.0%
  • Băm: 1.0%
  • Độ phức tạp thuật toán: 0.4%
  • Tìm kiếm: 0.8%
  • Mảng: 0.3%
  • Danh sách liên kết: 0.3%

6.2. Tối Ưu Hóa Thuật Toán Cho Phần Cứng Hiện Đại GPU Bộ Nhớ Đệm và Song Song

Việc tối ưu hóa thuật toán cho phần cứng hiện đại là một lĩnh vực nghiên cứu quan trọng. Các kiến trúc phần cứng như GPU (Graphics Processing Unit) và bộ nhớ đệm có thể được tận dụng để cải thiện hiệu suất tìm kiếmsắp xếp. Ví dụ, thuật toán có thể được song song hóa để thực hiện trên nhiều lõi CPU hoặc GPU đồng thời. Việc sử dụng bộ nhớ đệm hiệu quả có thể giảm thiểu thời gian truy cập bộ nhớ và cải thiện hiệu suất tổng thể. Việc tối ưu hóa thuật toán cho phần cứng hiện đại đòi hỏi sự hiểu biết sâu sắc về kiến trúc phần cứng và các kỹ thuật lập trình song song.

Mật độ từ khóa:

  • Thuật toán: 0.8%

6.3. Ứng Dụng AI Trong Tìm Kiếm và Sắp Xếp Học Máy và Tối Ưu Hóa

Các kỹ thuật học máy có thể được sử dụng để cải thiện hiệu suất và độ chính xác của các thuật toán tìm kiếmsắp xếp. Ví dụ, học máy có thể được sử dụng để dự đoán vị trí của phần tử cần tìm kiếm trong mảng hoặc danh sách liên kết, giúp giảm thời gian tìm kiếm trung bình. Ngoài ra, học máy có thể được sử dụng để tự động điều chỉnh các tham số của thuật toán sắp xếp để tối ưu hóa hiệu suất cho từng bộ dữ liệu cụ thể. Việc ứng dụng AI trong tìm kiếmsắp xếp là một lĩnh vực nghiên cứu đầy hứa hẹn, có thể mang lại những cải tiến đáng kể trong tương lai.

Mật độ từ khóa:

  • Thuật toán tìm kiếm: 0.4%
  • Tìm kiếm: 0.5%
  • Thuật toán sắp xếp: 0.4%
  • Sắp xếp: 0.3%
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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 mảng 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 mảng 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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân 2. Kết quả chạy Hình 2.1: Hình ảnh kết quả chạy của chương trình 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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 quả chạy Hình 2.2: Hình ảnh kết quả chạy của chương trình con xuất danh sách khách hàng 12 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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. Tìm 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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 quả chạy Hình 2.3: Hình ảnh kết quả chạy của chương trình con linear search theo mã khách hàng Tìm 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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 quả chạy Hình 2.4: hình ảnh kết quả chạy của chương trình 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 quả khi chưa sắp xếp: Hình 2.5: Hình ả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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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 quả chạy dùng Shaker Sort Hình 2.6: Hình ả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 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ á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].MaKH)<0)// neu ma khach hang o vi tri j nho hon ma khach hang o vi tri min min = j;// gan min=j de tim ma khach hang nho nhat co trong danh sach hoanvi(a[i], a[min]);// doi cho 2 khach hang } } 19 Downloaded by Nguynhavy Ha Vy (Ntkphuong205@gmail.com) lOMoARcPSD|16911414 Đồ án Cấu Trúc Dữ Liệu và Giải Thuật_Nguyễn Khánh Vân 2. Kết quả chạy dùng Selection Sort Hình 2.

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