Font size
WorksheetsBài tập trắc nghiệm về cấu trúc dữ liệu và thuật toán
Total questions: 113
Worksheet time: 57mins
Cấu trúc dữ liệu là gì?
Một thuật toán xử lý dữ liệu
Một cách lưu trữ và tổ chức dữ liệu
Một ngôn ngữ lập trình
Một chương trình phần mềm
Mục tiêu chính của thuật toán là gì?
Tiêu tốn ít bộ nhớ nhất
Đảm bảo tốc độ thực thi nhanh nhất
Giải quyết bài toán trong thời gian và tài nguyên hợp lý
Đảm bảo không có lỗi
Thuật toán là gì?
Một dãy các lệnh được mô tả bằng ngôn ngữ lập trình
Một chuỗi các bước giải quyết bài toán
Một tập hợp các phương pháp giải bài toán phức tạp
Một quy trình lặp đi lặp lại đến khi tìm được kết quả
Độ phức tạp thời gian của thuật toán thường được biểu diễn bằng:
Ký hiệu O lớn
Đơn vị thời gian thực tế
Ký hiệu θ nhỏ
Số lần lặp
Khi nào thuật toán được gọi là tối ưu?
Khi chạy nhanh nhất trong mọi trường hợp
Khi chiếm ít bộ nhớ nhất
Khi đạt hiệu quả tốt nhất với chi phí chấp nhận được
Khi không có lỗi
Tìm kiếm nhị phân yêu cầu danh sách phải có đặc điểm nào?
Được sắp xếp
Không trùng lặp phần tử
Có số phần tử chẵn
Chổng quang trọng
Đâu là phương pháp đo độ phức tạp thuật toán?
Đếm số lệnh trong chương trình
Đếm số phép toán cơ bản thực hiện
Đo thời gian thực thi thực tế
Đếm số lượng vòng lặp
Độ phức tạp thời gian trong trường hợp xấu nhất được gọi là gì?
Best-case complexity
Average-case complexity
Worst-case complexity
Time complexity
Thuật toán nào có độ phức tạp tốt nhất trong trường hợp tốt nhất?
Tìm kiếm nhị phân
Sắp xếp chọn
Sắp xếp nhanh
Duyệt tuyến tính
Phép toán cơ bản để phân tích độ phức tạp thuật toán là gì?
Thời gian thực thi thực tế
Số phép toán cơ bản thực hiện
Số câu lệnh trong mã nguồn
Số lần gọi đệ quy
Thuật toán nào dưới đây là thuật toán chia để trị (Divide and Conquer)?
Tìm kiếm tuyến tính
Sắp xếp nhanh (Quick Sort)
Sắp xếp chèn (Insertion Sort)
Thuật toán tham lam (Greedy)
Độ phức tạp không gian của thuật toán liên quan đến yếu tố nào?
Bộ nhớ tạm thời cần thiết
Số lần lặp trong vòng lặp
Số lượng câu lệnh thực thi
Tốc độ xử lý của CPU và I/O
Ký hiệu Big-O trong phân tích thuật toán được sử dụng để:
Mô tả độ phức tạp trung bình
Mô tả độ phức tạp trường hợp tốt nhất
Mô tả độ phức tạp trường hợp xấu nhất
Mô tả độ phức tạp tổng quát
Giả sử có một thuật toán với độ phức tạp thời gian là T(n)=2n2+3n+5 , thì độ phức tạp O lớn là gì?
O(n2)
O(n)
O(1)
O(n3)
Phân tích độ phức tạp thuật toán nhằm mục đích:
Tìm thuật toán dễ lập trình nhất
Tìm thuật toán chạy nhanh nhất và chiếm ít bộ nhớ nhất
Tìm thuật toán có ít lỗi nhất
Tìm thuật toán tiết kiệm chi phí triển khai nhất
Thuật toán nào dưới đây có độ phức tạp thời gian tốt nhất để tìm kiếm trên danh sách đã sắp xếp?
Tìm kiếm tuyến tính
Tìm kiếm nhị phân
Tìm kiếm theo băm
Tìm kiếm cây nhị phân tìm kiếm (BST)
Ký hiệu O lớn mô tả điều gì?
Thời gian thực thi thuật toán trên máy tính cụ thể
Độ phức tạp trường hợp tốt nhất
Độ phức tạp trường hợp xấu nhất
Kết quả chính xác của thuật toán
Thuật toán sắp xếp nào dưới đây có độ phức tạp trung bình là O(nlogn) ?
Sắp xếp chọn (Selection Sort)
Sắp xếp nhanh (Quick Sort)
Sắp xếp bọt (Bubble Sort)
Sắp xếp chèn (Insertion Sort)
Khi kích thước dữ liệu đầu vào tăng, thuật toán nào sẽ bị ảnh hưởng lớn nhất?
O(logn)
O(n)
O(n2)
O(1)
Nếu một thuật toán có độ phức tạp T(n)=3n+2 , thì trong ký hiệu O lớn, độ phức tạp là gì?
O(n)
O(1)
O(n2)
O(logn)
Thuật toán nào dưới đây là tối ưu nhất để sắp xếp mảng lớn?
Merge Sort
Quick Sort
Heap Sort
Tất cả đều tốt như nhau
Mảng là gì?
Một danh sách các phần tử không đồng nhất
Một danh sách các phần tử có kích thước động
Một danh sách các phần tử có cùng kiểu dữ liệu
Một danh sách các phần tử có thể thay đổi kích thước
Làm thế nào để truy cập phần tử thứ iii trong mảng?
Sử dụng vòng lặp
Sử dụng con trỏ
Sử dụng chỉ số mảng: array[i]
Sử dụng hàm tìm kiếm
Độ phức tạp thời gian của việc truy cập một phần tử trong mảng là gì?
O(1)
O(n)
O(logn)
O(n2)
Mảng trong C/C++ được bắt đầu với chỉ số:
1
-1
0
Không cố định
Kích thước mảng trong C phải được xác định:
Trong quá trình biên dịch
Trong lúc chạy chương trình
Bằng con trỏ
Bằng cách sử dụng hàm
Một mảng được khai báo trong C bằng cú pháp nào?
int a[];
int a[10];
int a(10);
int[] a;
Mảng hai chiều thường được dùng để biểu diễn:
Danh sách liên kết
Đồ thị
Bảng dữ liệu
Cây nhị phân
Nếu một mảng có n phần tử, chỉ số hợp lệ của mảng này là:
1 đến n
0 đến n−1
−1 đến n−1
0 đến n
Khi khai báo mảng int arr[5], thì:
Mảng này chứa 5 phần tử, chỉ số từ 1 đến 5
Mảng này chứa 5 phần tử, chỉ số từ 0 đến 4
Mảng này chứa 6 phần tử, chỉ số từ 0 đến 5
Mảng này chứa 5 phần tử, chỉ số bất kỳ
Câu lệnh nào dưới đây gán giá trị 10 cho phần tử thứ 3 của mảng arr?
arr[2] = 10;
arr[3] = 10;
arr[10] = 3;
arr = 10;
Khai báo int arr[] = {1, 2, 3, 4}; có nghĩa là gì?
Một mảng động với các phần tử lần lượt là 1, 2, 3, 4
Một mảng có kích thước tự động, với các giá trị ban đầu là 1, 2, 3, 4
Một mảng cố định không thay đổi được giá trị
Mảng không hợp lệ
Một chuỗi ký tự trong C thực chất là:
Một mảng ký tự kết thúc bằng ký tự '\0'
Một biến con trỏ chứa địa chỉ của chuỗi
Một danh sách liên kết của ký tự
Một cấu trúc dữ liệu phức tạp
Hàm nào được dùng để tính chiều dài của chuỗi trong C?
strlen()
strcpy()
strcat()
strcmp()
Kết quả của chuỗi "Hello" cộng với chuỗi "World" trong C là gì?
"Hello World"
"HelloWorld"
Kết hợp bằng hàm strcat()
Lỗi biên dịch
Nếu char str[5] = "abcd";, thì kích thước thực sự của mảng là:
4
5
6
Không xác định
Độ phức tạp thời gian của thuật toán tìm kiếm tuyến tính trong mảng là gì?
O(1)
O(logn)
O(n)
O(n2)
Cách tối ưu để tìm phần tử lớn nhất trong mảng có độ phức tạp là:
O(n2)
O(n)
O(logn)
O(1)
Hàm strcpy() trong C thực hiện điều gì?
Sao chép một chuỗi từ nơi này sang nơi khác
Nối hai chuỗi lại với nhau
So sánh hai chuỗi
Tính chiều dài chuỗi
Trong một mảng hai chiều int arr[3][4], phần tử thứ arr[2][3] tương ứng với:
Phần tử hàng 2, cột 3
Phần tử hàng 3, cột 4
Phần tử hàng 2, cột 4
Phần tử hàng 3, cột 3
Nếu một chuỗi có kích thước n ký tự, độ phức tạp thời gian của hàm nối chuỗi (strcat) là gì?
O(1)
O(n)
O(n2)
O(logn)
Danh sách liên kết là gì?
Một cấu trúc dữ liệu tuyến tính lưu trữ các phần tử trong các ô liên tiếp của bộ nhớ
Một cấu trúc dữ liệu trong đó các phần tử được liên kết với nhau bằng con trỏ
Một cấu trúc dữ liệu dùng để lưu trữ các giá trị theo thứ tự giảm dần
Một danh sách có kích thước cố định
Đâu là thành phần cơ bản của một nút trong danh sách liên kết?
Dữ liệu và con trỏ tới nút tiếp theo
Chỉ có dữ liệu
Chỉ có con trỏ
Con trỏ tới nút trước và nút tiếp theo
Danh sách liên kết đơn (Singly Linked List) khác với danh sách liên kết đôi (Doubly Linked List) ở điểm nào?
Danh sách liên kết đôi có con trỏ tới nút trước và nút tiếp theo
Danh sách liên kết đôi không thể được duyệt ngược
Danh sách liên kết đơn không thể thêm phần tử mới
Danh sách liên kết đơn lưu trữ nhiều thông tin hơn mỗi nút
Đâu là ưu điểm của danh sách liên kết so với mảng?
Khả năng thay đổi kích thước động
Tốc độ truy cập ngẫu nhiên nhanh hơn
Dễ dàng lập trình hơn
Không sử dụng con trỏ
Chèn một phần tử vào đầu danh sách liên kết đơn có độ phức tạp thời gian là:
O(1)
O(logn)
O(n)
O(n2)
Để xóa một nút giữa danh sách liên kết đơn, cần biết:
Con trỏ tới nút trước nó
Con trỏ tới nút tiếp theo nó
Giá trị của nút cần xóa
Con trỏ tới nút đầu tiên
Trong danh sách liên kết tròn (Circular Linked List), nút cuối cùng liên kết với:
Nút đầu tiên
Nút giữa danh sách
Một nút bất kỳ
Nút cuối danh sách
Danh sách liên kết có nhược điểm nào sau đây?
Sử dụng thêm bộ nhớ cho con trỏ
Truy cập ngẫu nhiên chậm hơn mảng
Khó lập trình hơn so với mảng
Tất cả các ý trên
Độ phức tạp thời gian để tìm kiếm một phần tử trong danh sách liên kết là:
O(1)
O(logn)
O(n)
O(n2)
Nếu danh sách liên kết có n phần tử, thì có bao nhiêu con trỏ trong danh sách liên kết đơn?
n−1
n
n+1
2n
Trong danh sách liên kết đôi (Doubly Linked List), mỗi nút chứa:
Một con trỏ tới nút trước và một con trỏ tới nút sau
Chỉ một con trỏ tới nút sau
Chỉ một con trỏ tới nút trước
Hai con trỏ tới nút tiếp theo
Để chuyển một danh sách liên kết đôi thành danh sách liên kết đơn, bạn cần làm gì?
Xóa con trỏ tới nút trước ở mỗi nút
Xóa con trỏ tới nút sau ở mỗi nút
Xóa tất cả các nút
Sao chép danh sách
Danh sách liên kết tròn có ưu điểm gì so với danh sách liên kết thông thường?
Không có nút cuối cùng
Dễ dàng quay vòng
Thao tác duyệt danh sách liên tục
Tất cả các ý trên
Câu lệnh nào dùng để tạo một nút mới trong danh sách liên kết?
Node* newNode = new Node();
Node* newNode;
Node newNode = malloc(sizeof(Node));
Node* newNode = createNode();
Danh sách liên kết nào sau đây có thể duyệt theo cả hai hướng?
Danh sách liên kết đơn
Danh sách liên kết đôi
Danh sách liên kết tròn
Danh sách liên kết đơn tròn
Khi thêm một phần tử vào cuối danh sách liên kết đơn, bạn cần:
Truy cập nút cuối cùng
Thêm nút mới sau nút đầu tiên
Gán nút mới là nút đầu tiên
Xóa tất cả các nút trước đó
Danh sách liên kết đôi có ưu điểm gì so với danh sách liên kết đơn?
Có thể duyệt ngược và thuận
Tiết kiệm bộ nhớ hơn
Tìm kiếm nhanh hơn
Không cần quản lý con trỏ
Độ phức tạp thời gian của việc chèn một nút vào danh sách liên kết đôi là:
O(1)
O(logn)
O(n)
O(n2)
Khi duyệt một danh sách liên kết tròn, điều gì cần kiểm tra để tránh lặp vô hạn?
Con trỏ tới nút đầu tiên
Con trỏ NULL
Số phần tử đã duyệt
Con trỏ tới nút cuối cùng
Trong danh sách liên kết đôi, để xóa nút thứ k, bạn cần:
Cập nhật cả con trỏ của nút trước và nút sau nút k
Chỉ cập nhật con trỏ nút trước
Chỉ cập nhật con trỏ của nút sau
Không cần cập nhật con trỏ
Danh sách liên kết hiệu quả hơn mảng trong trường hợp nào?
Khi chèn hoặc xóa phần tử nhiều lần
Khi cần truy cập ngẫu nhiên
Khi cần lưu trữ số lượng lớn phần tử
Khi cần thao tác song song
Ngăn xếp (Stack) là gì?
Một cấu trúc dữ liệu tuyến tính, tuân theo quy tắc FIFO
Một cấu trúc dữ liệu tuyến tính, tuân theo quy tắc LIFO
Một cấu trúc dữ liệu phi tuyến tính
Một cấu trúc dữ liệu dùng để lưu trữ các hàng đợi
Hàng đợi (Queue) là gì?
Một cấu trúc dữ liệu tuyến tính, tuân theo quy tắc FIFO
Một cấu trúc dữ liệu tuyến tính, tuân theo quy tắc LIFO
Một cấu trúc dữ liệu phi tuyến tính
Một danh sách liên kết vòng
Hoạt động thêm phần tử vào ngăn xếp được gọi là:
Push
Pop
Peek
Enqueue
Hoạt động xóa phần tử khỏi ngăn xếp được gọi là:
Pop
Push
Peek
Dequeue
Ngăn xếp sử dụng nguyên tắc:
FIFO (First In, First Out)
LIFO (Last In, First Out)
FILO (First In, Last Out)
LILO (Last In, Last Out)
Hàng đợi sử dụng nguyên tắc:
FIFO (First In, First Out)
LIFO (Last In, Last Out)
FILO (First In, Last Out)
LILO (Last In, Last Out)
Cách đơn giản nhất để thực hiện ngăn xếp là sử dụng:
Mảng hoặc danh sách liên kết
Danh sách liên kết đôi
Danh sách liên kết tròn
Cây nhị phân
Hàng đợi ưu tiên khác hàng đợi thông thường ở điểm nào?
Phần tử có độ ưu tiên cao sẽ được xử lý trước
Chỉ thêm được phần tử vào cuối
Phần tử đầu tiên luôn được xử lý trước
Không cần quan tâm đến độ ưu tiên
Ngăn xếp có thể được sử dụng trong bài toán nào sau đây?
Đảo ngược chuỗi
Tìm kiếm nhị phân
Quản lý hàng đợi trong in ấn
Duyệt đồ thị theo chiều rộng (BFS)
Ngăn xếp sử dụng con trỏ trong C được triển khai tốt nhất bằng:
Danh sách liên kết
Mảng
Danh sách liên kết đôi
Cây nhị phân
Hàng đợi vòng (Circular Queue) được sử dụng để:
Tối ưu bộ nhớ trong việc quản lý hàng đợi
Duyệt đồ thị
Tìm kiếm trong cấu trúc dữ liệu
Lưu trữ dữ liệu dạng cây
Hàng đợi đôi (Deque) cho phép:
Thêm và xóa phần tử ở cả hai đầu
Chỉ thêm phần tử vào cuối
Chỉ xóa phần tử ở đầu
Không cho phép thao tác trên cả hai đầu
Độ phức tạp thời gian của việc thêm một phần tử vào ngăn xếp là:
O(1)
O(log n)
O(n)
O(n2)
Khi hàng đợi được triển khai bằng mảng, vấn đề nào có thể xảy ra?
Tràn hàng đợi (Queue Overflow)
Bộ nhớ không được tái sử dụng
Hàng đợi đầy ngay cả khi có chỗ trống
Tất cả các ý trên
Để tránh lãng phí bộ nhớ trong hàng đợi triển khai bằng mảng, bạn sử dụng:
Hàng đợi vòng (Circular Queue)
Ngăn xếp
Danh sách liên kết
Cây nhị phân
Trong hàng đợi ưu tiên, phần tử nào được xử lý đầu tiên?
Phần tử có độ ưu tiên cao nhất
Phần tử được thêm vào đầu tiên
Phần tử có độ ưu tiên thấp nhất
Phần tử có giá trị lớn nhất
Deque khác hàng đợi thông thường ở điểm nào?
Cho phép thêm và xóa ở cả hai đầu
Sử dụng mảng thay vì danh sách liên kết
Luôn xóa phần tử đầu tiên
Không cho phép xóa phần tử
Để đảo ngược hàng đợi bằng ngăn xếp, bạn cần thực hiện:
Đẩy tất cả phần tử của hàng đợi vào ngăn xếp, sau đó kéo chúng ngược trở lại hàng đợi
Duyệt ngược hàng đợi
Sử dụng một hàng đợi bổ sung
Sử dụng cây nhị phân
Ngăn xếp được sử dụng trong thuật toán nào sau đây?
Duyệt đồ thị theo chiều sâu (DFS)
Duyệt đồ thị theo chiều rộng (BFS)
Sắp xếp theo độ ưu tiên
Sắp xếp bằng cây nhị phân
Cây (Tree) là gì?
Một cấu trúc dữ liệu phi tuyến tính
Một cấu trúc dữ liệu tuyến tính
Một cấu trúc dữ liệu giống danh sách liên kết
Một cấu trúc dữ liệu không có nút gốc
Nút gốc (Root) trong cây là gì?
Nút đầu tiên của cây
Nút cuối cùng của cây
Nút không có nút cha
Nút có ít nhất hai con
Trong cây nhị phân, mỗi nút có tối đa bao nhiêu nút con?
1
2
3
Không giới hạn
Cây nhị phân hoàn chỉnh (Complete Binary Tree) là gì?
Một cây mà tất cả các mức đều đầy đủ ngoại trừ mức cuối cùng
Một cây mà các nút đều có 2 con
Một cây chỉ chứa nút gốc
Một cây mà các nút được sắp xếp theo thứ tự tăng dần
Nút lá (Leaf) là gì?
Một nút không có nút con
Một nút không có nút cha
Một nút nằm ở mức đầu tiên của cây
Một nút có đúng hai con
Độ cao của cây (Height) được định nghĩa là gì?
Chiều dài đường đi dài nhất từ gốc đến nút lá
Tổng số nút trong cây
Số nút trên đường đi từ gốc đến nút cuối cùng
Số cạnh trong cây
Trong cây nhị phân, duyệt theo thứ tự trước (Preorder) thực hiện theo thứ tự nào?
Gốc - Trái - Phải
Trái - Gốc - Phải
Trái - Phải - Gốc
Phải - Trái - Gốc
Duyệt cây nhị phân theo thứ tự giữa (Inorder) thực hiện theo thứ tự nào?
Trái - Gốc - Phải
Gốc - Trái - Phải
Trái - Phải - Gốc
Phải - Gốc - Trái
Duyệt cây nhị phân theo thứ tự sau (Postorder) thực hiện theo thứ tự nào?
Trái - Phải - Gốc
Gốc - Trái - Phải
Trái - Gốc - Phải
Phải - Gốc - Trái
Cây tìm kiếm nhị phân (Binary Search Tree - BST) có đặc điểm gì?
Các nút bên trái nhỏ hơn gốc và các nút bên phải lớn hơn gốc
Mỗi nút có tối đa 3 nút con
Mỗi mức đều đầy đủ nút
Tất cả các nút có giá trị giống nhau
Trong cây nhị phân, nút nào có cùng mức gọi là gì?
Nút anh chị em (Sibling)
Nút cha
Nút lá
Nút con
Cây AVL là gì?
Một cây nhị phân cân bằng độ cao
Một cây mà mỗi nút có đúng 2 con
Một cây mà các nút được sắp xếp theo thứ tự tăng dần
Một cây nhị phân không có nút lá
Độ phức tạp trung bình của tìm kiếm trong cây tìm kiếm nhị phân (BST) là:
O(logn)
O(n)
O(1)
O(n2)
Một cây có n nút thì có bao nhiêu cạnh?
n−1
n
n+1
2n
Duyệt cây theo mức (Level Order Traversal) sử dụng cấu trúc dữ liệu nào?
Hàng đợi (Queue)
Ngăn xếp (Stack)
Mảng (Array)
Danh sách liên kết (Linked List)
Để tìm phần tử nhỏ nhất trong cây tìm kiếm nhị phân, bạn cần:
Đi xuống hết nhánh trái của cây
Đi xuống hết nhánh phải của cây
Tìm nút gốc
Duyệt toàn bộ cây
Cây nhị phân tìm kiếm không cân bằng có độ phức tạp tìm kiếm tệ nhất là:
O(n)
O(logn)
O(1)
O(n2)
Cây AVL đảm bảo cân bằng bằng cách nào?
Xoay cây khi cần thiết
Thêm nút mới vào cuối
Xóa các nút không cân bằng
Không cho phép thêm nút mới
Thuật toán sắp xếp là gì?
Một thuật toán để sắp xếp các phần tử theo thứ tự nhất định
Một thuật toán để tìm kiếm phần tử
Một thuật toán để chèn phần tử vào danh sách
Một thuật toán để xóa phần tử khỏi danh sách
Thuật toán sắp xếp nổi bọt (Bubble Sort) hoạt động như thế nào?
So sánh cặp phần tử liền kề và hoán đổi chúng nếu cần
Chia danh sách thành hai nửa rồi sắp xếp từng nửa
Chọn phần tử nhỏ nhất và đưa lên đầu danh sách
Sử dụng cấu trúc cây để sắp xếp
Độ phức tạp thời gian của Bubble Sort trong trường hợp tệ nhất là:
O(n2)
O(nlogn)
O(n)
O(1)
Thuật toán sắp xếp chọn (Selection Sort) chọn phần tử nào để đưa về vị trí đúng?
Phần tử nhỏ nhất hoặc lớn nhất
Phần tử đầu tiên trong danh sách
Phần tử ở giữa danh sách
Phần tử cuối cùng trong danh sách
Độ phức tạp thời gian của Selection Sort là:
O(n2)
O(nlogn)
O(n)
O(1)
Insertion Sort hoạt động tốt nhất khi:
Danh sách đã gần như sắp xếp
Danh sách có phần tử ngẫu nhiên
Danh sách hoàn toàn không sắp xếp
Danh sách rất lớn
Độ phức tạp thời gian của Insertion Sort trong trường hợp tốt nhất là:
O(n)
O(n2)
O(nlogn)
O(1)
Merge Sort sử dụng kỹ thuật nào?
Chia để trị (Divide and Conquer)
Lặp (Iteration)
Quy hoạch động (Dynamic Programming)
Tham lam (Greedy)
Độ phức tạp thời gian của Merge Sort là:
O(nlogn)
O(n2)
O(n)
O(1)
Quick Sort sử dụng kỹ thuật nào?
Chia để trị (Divide and Conquer)
Quy hoạch động (Dynamic Programming)
Tham lam (Greedy)
Lặp (Iteration)
Pivot trong Quick Sort là gì?
Phần tử dùng để chia danh sách thành hai phần
Phần tử lớn nhất trong danh sách
Phần tử nhỏ nhất trong danh sách
Phần tử ở giữa danh sách
Khi nào Merge Sort hiệu quả hơn Quick Sort?
Khi cần độ ổn định (Stable Sort)
Khi danh sách rất nhỏ
Khi không gian bộ nhớ bị giới hạn
Khi danh sách đã gần sắp xếp
Tại sao Quick Sort thường nhanh hơn Heap Sort trong thực tế?
Quick Sort có ít thao tác so sánh và di chuyển hơn
Quick Sort sử dụng ít bộ nhớ hơn
Heap Sort cần cấu trúc dữ liệu phức tạp hơn
Heap Sort không đảm bảo sắp xếp đúng
Khi áp dụng thuật toán Quick Sort, chọn Pivot như thế nào để đạt hiệu quả tối ưu?
Phần tử trung vị của danh sách
Phần tử đầu tiên
Phần tử cuối cùng
Phần tử bất kỳ
