fbpx
close

Quick Sort là gì? Tìm hiểu chi tiết về Quick Sort

Tác giả: Đông Tùng Ngày cập nhật: 22/11/2021 Chuyên mục: Webmasters
Disclosure
Website Wiki.tino.org được cung cấp bởi Tino Group. Truy cập và sử dụng website đồng nghĩa với việc bạn đồng ý với các điều khoản và điều kiện trong chính sách bảo mật - điều khoản sử dụng nội dung. Wiki.tino.org có thể thay đổi điều khoản sử dụng bất cứ lúc nào. Việc bạn tiếp tục sử dụng Wiki.tino.org sau khi thay đổi có nghĩa là bạn chấp nhận những thay đổi đó.
Why Trust Us
Các bài viết với hàm lượng tri thức cao tại wiki.tino.org được tạo ra bởi các chuyên viên Marketing vững chuyên môn và được kiểm duyệt nghiêm túc theo chính sách biên tập bởi đội ngũ biên tập viên dày dặn kinh nghiệm. Mọi nỗ lực của chúng tôi đều hướng đến mong muốn mang đến cho cộng đồng nguồn thông tin chất lượng, chính xác, khách quan, đồng thời tuân thủ các tiêu chuẩn cao nhất trong báo cáo và xuất bản.

Các thuật toán sắp xếp dữ liệu là một yếu tố quan trọng khá quan trọng trong lập trình, điển hình trong số đó là Quick Sort. Vậy Quick Sort là gì? Trong bài viết hôm nay, bạn hãy cùng Tino Group tìm hiểu về Quick Sort để xem cách thuật toán này triển khai và hoạt động như thế nào nhé!

Quick Sort là gì?

Khái niệm Quick Sort

Thuật toán Quick Sort (Sắp xếp nhanh) là một quy trình có hệ thống để sắp xếp các phần tử của một mảng. Giống như Merge Sort, QuickSort là một thuật toán sử dụng cách thức chia để trị (Divide and Conquer algorithm).

Tên gọi “Quick Sort” ám chỉ thuật toán này có khả năng sắp xếp dữ liệu nhanh hơn nhiều so với bất kỳ thuật toán sắp xếp truyền thống nào khác. Tuy nhiên, Quick Sort không được ổn định vì thứ tự tương đối của các phần tử bằng nhau không được đảm bảo.

Quick-sort-la-gi

Cách thức hoạt động của Quick Sort

Thuật toán sẽ chọn ra một phần tử trong mảng để làm điểm đánh dấu gọi là pivot. Sau khi chọn được điểm đánh dấu, nó sẽ chia mảng đó thành hai mảng con bằng cách so sánh với pivot đã chọn. Một mảng sẽ bao gồm các phần tử nhỏ hơn hoặc bằng pivot và mảng còn lại luôn lớn hơn hoặc bằng pivot.

Sau đó, quá trình này được lặp lại đủ số lần cho đến khi các mảng nhỏ có thể được sắp xếp một cách dễ dàng để tạo ra một tập dữ liệu được sắp xếp đầy đủ.

Các nhiều phiên bản Quick Sort khác nhau chọn pivot theo những cách khác nhau. Tốc độ sắp xếp của thuật toán phải phụ thuộc vào việc lựa chọn pivot, có một số cách để chọn như sau:

  • Luôn chọn phần tử đầu tiên làm pivot.
  • Luôn chọn phần tử cuối cùng làm pivot
  • Chọn một phần tử ngẫu nhiên làm pivot.
  • Chọn vị trí ở giữa làm pivot.
Quick-sort-la-gi

Ứng dụng của thuật toán Quick Sort

Quick Sort cung cấp một cách tiếp cận nhanh chóng và có phương pháp để sắp xếp bất kỳ thứ gì. Sau đây là một số ứng dụng của Quick Sort

  • Máy tính thương mại: Được sử dụng trong các tổ chức chính phủ và tư nhân với mục đích phân loại dữ liệu khác nhau như sắp xếp tài khoản/hồ sơ theo tên hoặc theo ID, phân loại giao dịch theo thời gian hoặc địa điểm, phân loại file theo tên hoặc ngày tạo, v.v.
  • Tính toán số: Hầu hết các thuật toán được phát triển hiệu quả sử dụng hàng đợi ưu tiên và sắp xếp inturn để đạt được độ chính xác trong tất cả các phép tính.
  • Tìm kiếm thông tin: Thuật toán sắp xếp hỗ trợ tìm kiếm thông tin nhanh hơn và hiệu quả hơn

Độ phức tạp của Quick Short

Khi chọn một thuật toán sắp xếp, hiệu quả là một trong những yếu tố quan trọng nhất. Dưới đây là một số điểm hiệu quả của thuật toán Quicksort.

Độ phức tạp về thời gian của Quick Short

Trong các trường hợp tốt nhất, trung bình và xấu nhất, thuật toán Quick Sort thực hiện với độ phức tạp O (n), O (n log n) và O (n ^ 2) tương ứng. Đây là một trong những thuật toán sắp xếp hiệu quả nhất khi nói đến độ phức tạp về thời gian.

Độ phức tạp về không gian của Quick Short

Độ phức tạp không gian trung bình của Quick Sort là O (log n) và độ phức tạp không gian trong trường hợp xấu nhất là O (n). Điều này ngang bằng với hầu hết các thuật toán sắp xếp phổ biến, nhưng bản chất của thuật toán đệ quy là chúng không tối ưu hóa việc sử dụng bộ nhớ.

Tối ưu hóa

Với bất kỳ thuật toán nào, thường có một số tối ưu hóa có thể được áp dụng cho các trường hợp khác. Để đảm bảo rằng không gian đã sử dụng được giới hạn ở O (log n), thuật toán có thể được thực hiện để đệ quy vào phía nhỏ hơn của phân vùng và cũng sử dụng đệ quy đuôi. Người ta cũng có thể triển khai một thuật toán sắp xếp kết hợp chuyển sang một thuật toán sắp xếp lặp đi lặp lại có thể hiệu quả hơn về thời gian cho các mảng nhỏ hơn.

Quick-sort-la-gi

Thuật toán Quick Sort trong ngôn ngữ lập trình C++

Mô tả thuật toán

Thuật toán sẽ có hai giai đoạn. Giai đoạn đầu là phân đoạn mảng (partition()) và giai đoạn sau là sắp xếp (quickSort()).

  • Chọn pivot cho mảng.
  • Tạo hai biến là left và right để trỏ đến bên trái và bên phải của danh sách.
  • Tiến hành so sánh các phần tử với pivot. Trong trường hợp phần tử nhỏ hơn pivot thì dịch chuyển qua bên trái và ngược lại.
  • Sau khi đã dịch chuyển thì tiến hành công việc sắp xếp các phần tử trong mảng con mới, trước khi tiếp tục phân đoạn tiếp theo.

Code thuật toán Quick Sort trong C++

Ở phần trên đã trình bài các bước viết thuật toán. Để chi tiết hơn, bạn hãy tham khảo các dòng code trong thuật toán dưới đây.

Hàm partition()

Quick-sort-la-gi

Hàm quicksort()

Quick-sort-la-gi

Hàm swap()

Quick-sort-la-gi

Ví dụ về Quick Sort trong mảng

Để minh họa cho hình ảnh ở trên, chúng ta hãy cùng làm một ví dụ áp dụng thuật toán sắp xếp nhanh (Quick Sort). Sắp xếp các phần tử trong mảng arr[] = {9, -3, 5, 2, 6, 8, -6, 1, 3} theo thứ tự tăng dần.

#include<stdio.h>

#include<iostream>

using namespace std;

void swap(int &a, int &b)

{

int t = a;

a = b;

b = t;

}

int partition (int arr[], int low, int high)

{

int pivot = arr[high];

int left = low;

int right = high - 1;

while(true){

while(left <= right && arr[left] < pivot) left++;

while(right >= left && arr[right] > pivot) right--;

if (left >= right) break;

swap(arr[left], arr[right]);

left++;

right--;

}

swap(arr[left], arr[high]);

return left;

}

void quickSort(int arr[], int low, int high)

{

if (low < high)

{

int index = partition(arr, low, high);

quickSort(arr, low, index - 1);

quickSort(arr, index + 1, high);

}

}

void printArray(int arr[], int size)

{

int i;

for (i=0; i < size; i++){

cout << arr[i];

cout<<"\t";

}

}

int main()

{

int arr[] = {9, -3, 5, 2, 6, 8, -6, 1, 3};

int n = sizeof(arr)/sizeof(arr[0]);

quickSort(arr, 0, n-1);

cout<<"Mảng sau khi được sắp xếp: \n";

printArray(arr, n);

cout<<"\n---------------------------------------\n";

cout<<"Chương trình này được đăng tại Freetuts.net";

}

Kết quả ta được:

Quick-sort-la-gi

Tại sao Quick Sort lại hiệu quả hơn Merge Sort?

Về không gian phụ trợ: Quick Sort là một thuật toán sắp xếp tại chỗ trong khi Merge Sort phải sử dụng thêm không gian. Sắp xếp tại chỗ có nghĩa là không có dung lượng lưu trữ bổ sung nào được sử dụng để thực hiện sắp xếp (ngoại trừ ngăn xếp đệ quy). Merge Sort yêu cầu một mảng tạm thời để hợp nhất các mảng đã sắp xếp, vì vậy Quick Sort trở thành tùy chọn tốt hơn.

Trường hợp xấu nhất: Trường hợp xấu nhất của Quick Sort là O (n2) có thể tránh được bằng cách sử dụng Quick Sort ngẫu nhiên. Lúc này sẽ có được trường hợp trung bình bằng cách chọn phần tử xoay ngẫu nhiên và cải thiện hiệu suất như Merge Sort

Thân thiện với bộ nhớ cache: Quick Sort cũng là một thuật toán sắp xếp thân thiện với bộ nhớ cache vì thuật toán này có vị trí tham chiếu tốt khi được sử dụng cho các mảng.

Tóm lại, Quick Sort là một thuật toán sắp xếp rất hữu ích trong nhiều trường hợp và được sử dụng phổ biến hiện nay. Bài viết trên đã cung cấp cho bạn một số thông tin liên quan đến Quick Sort, hy vọng bạn sẽ áp dụng thuật toán này hiệu quả để sắp xếp dữ liệu nhé!

FAQs về Quick Sort

Có bao nhiêu loại thuật toán sắp xếp?

Quick Sort là một loại thuật toán sắp xếp trong rất nhiều loại khác nhau, mỗi loại sẽ có những ưu điểm riêng. Các thuật toán sắp xếp phổ biến trong JavaScript gồm:

  • Bubble Sort.
  • Selection Sort.
  • Insertion Sort.
  • Merge Sort.
  • Quick sort.
  • Bucket Sort.

Quick Sort có phải là một thuật toán ổn định không?

Quick Sort không phải là một thuật toán ổn định vì việc hoán đổi các phần tử được thực hiện theo vị trí của pivot (mà không xem xét vị trí ban đầu của chúng). Thuật toán sắp xếp được cho là ổn định nếu nó duy trì thứ tự tương đối của các bản ghi trong trường hợp các khóa bằng nhau.

Quick Sort có phải là một thuật toán tại chỗ không?

Quick Sort là một thuật toán tại chỗ, nghĩa là tất cả các số đều được sắp xếp trong chính mảng ban đầu.

Tại sao nên sử dụng Quick Sort ngẫu nhiên?

Đôi khi, việc chọn phần tử ngoài cùng bên phải có thể dẫn đến trường hợp xấu nhất. Trong những trường hợp như vậy, việc chọn một phần tử ngẫu nhiên làm trục xoay của bạn ở mỗi bước sẽ giảm xác suất dẫn đến hành vi trong trường hợp xấu nhất.

Chúng ta sẽ có nhiều khả năng chọn các trục gần tâm của mảng hơn và khi điều này xảy ra, các nhánh đệ quy đồng đều hơn và do đó thuật toán kết thúc nhanh hơn rất nhiều.

Độ phức tạp thời gian chạy dự kiến ​​là O (n log n) vì các trục ngẫu nhiên đã chọn được cho là để tránh hành vi trong trường hợp xấu nhất.

5/5 - (1 bình chọn)

Đông Tùng

Senior Technology Writer

Là cử nhân Quản trị kinh doanh của Trường Đại học Tài chính - Marketing, Tùng bắt đầu làm việc tại Tino Group từ năm 2021 ở vị trí Content Marketing để thỏa mãn niềm đam mê viết lách của bản thân. Sở hữu khả năng sáng tạo đặc biệt, anh cùng đội ngũ của mình đã tạo nên những chiến dịch quảng cáo độc đáo cùng vô số bài viết hữu ích về nhiều chủ đề khác nhau. Sự tỉ mỉ, kiên trì và tinh thần sáng tạo của Tùng đã góp phần lớn vào thành công của Tino Group trong lĩnh vực marketing trực tuyến.

Xem thêm bài viết

Bài viết liên quan

Mục lục

Xem nhiều

giá tốt, chất lượng cao mình rất hài lòng
chất lượng dịch vụ tốt lắm...á
chất lượng dịch vụ rất tốt.
giá tốt, chất lượng cao mình rất hài lòng
Dịch vụ chăm sóc khách hàng tốt
Dùng rất oke nha mọi người
Dịch vụ chăm sóc khách hàng tốt, mình rất hài lòng về dịch vụ của TINOHOST
Đã mua rất nhiều tên miền tại Tinohost. Chất lượng tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
tuyệt vời chăm sóc khách hàng quá tốt
dịch vụ và chăm sóc khách hàng rất tốt , mình rất thích tinohost , mình đã sử dụng nhiều dịch vụ của tinohost rồi
Quá tốt - Quá xuất sắc và tuyệt
Hỗ trợ nhiệt tình. dịch vụ chất lượng
Đội ngũ support rất nhiệt tình.
Sử dụng dịch vụ của bạn Tinohost 2 3 năm nay chưa khi nào phải thất vọng.
host dùng chất lượng, miền giá rẻ
dịch vụ hỗ trợ rất nhanh, tốc độ hosting tốt
Hộ trợ tốt, nhanh. Tuyệt vời 🥰
tuyệt vời, dịch vụ cực tốt và hỗ trợ siêu nhanh
Làm việc nhanh chóng, giá thành hợp lí.
Hosting rẻ và nhanh thích hợp cho học sinh sinh viên như mình
dịch vu tốt ! Sẽ sử dụng thưởng xuyên !
Mỗi lần cần gì, nhắn Tino là được hỗ trợ ngay. Nên một đứa không biết gì về web như mình cũng tạo được blog. Cơ bản mình chỉ lo viết, mọi thứ có anh IT của Tino lo hết.
Nhìn chung thì Tino xứng đáng là một trong những nhà cung cấp host giá rẻ #1 tại VN. Bên này support khá nhanh và nhiệt tình nên quá trình sử dụng diễn ra tương đối trơn tru.
Chất lượng quá ok so với mức giá. Các SME có thể tham khảo để dựng web nhé.
uy tín chất lượng chuẩn cho 5 sao
Dịch vụ nhanh chóng thanh toán tiện lợi
Dịch vụ nhanh chóng, giá cả hợp lý
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
Dịch vụ tốt, giá cả hợp lý👍
Rất hay, rất tốt, rất hữu ích
Hỗ trợ rất nhanh và nhiệt tình
Chất lượng phục vụ ok, support khá nhanh chóng và chất lượng gói lớn tốt, gói nhỏ cần tốt hơn.
dịch vụ tốt, thanh toán nhanh chống
Hài lòng dịch vụ của tinohost
Sau khi sử dụng dịch vụ của TinoHost. Mình thấy website load nhanh hơn hẳn so với sử dụng ở nhà cung cấp cũ. Giá cả do mình đc mua với giá sale 99% của TinoHost nên rất là rẻ. Gói mình mua là gòi Hosting Bussiness 20GB. Thông số cấu hình cao nên web load khá mượt
Chúc TinoHost phát triển!
domain rẻ, có nhiều gói hữu ích thích hợp cho sinh viên
Hài lòng về dịch vụ và tư vấn
Dịch vụ tốt . Support nhiệt tình
Chất lượng OK
Nhanh chóng
dịch vụ rất tốt
Nhân viên support nhanh, hỗ trợ nhiệt tình, giao dịch tự động nên khá tiện
Đã dùng nhiều dịch vụ tại Tinohost, chất lượng tốt, rất hài lòng ...😀
Sự dụng rất hài lòng với các dịch vụ của tinohost
Dịch vụ tốt, uy tín chất lượng
Tino dịch vụ quá tuyệt vời
Giá rẻ, dịch vụ tốt, hỗ trợ nhanh chóng
dịch vụ rất tốt rất tuyệt vời
Giá hợp lý cho người mới dùng
Mình thấy Tinohost có giao diện thân thiện, dễ đăng ký sử dụng cho người mới tập tành làm web như mình. Hosting hỗ trợ có nhiều lựa chọn về dung lượng và giá cả! Thanh toán qua momo thuận tiện. Recommended!
wed quá ok làm việc nhanh ngọn
Dịch vụ tốt. Khá hài lòng vì support nhiệt tình
Dịch vụ quá tuyệt vời danh cho các bạn
Xin cảm ơn đội ngủ kỹ thuật. Các bạn rất chuyên nghiệp và thân thiện. Tôi sẽ giới thiệu các bạn cho bạn bè của mình.
Dịch vụ hỗ trợ tốt, ổn định, thanh toán dễ dàng.
Mình từng dùng VPS bên Vietel IDC, hay gặp lỗi vặt và bảo trì liên tục. Nhưng Tino thì rất ok
dùng tốt, nhanh, dễ sử dụng
Giao diện đẹp mắt, dễ sử dụng
Đề nghị xem lại vấn đề phục vụ khách hàng (livchat)!
Good. Tốc độ cao. Tùy chỉnh nhiều trên shared hosting.
hosting ngon, giá luôn rẻ, tôi làm code nhưng rất thích sài host tino
Tino cung cấp host rất chuyên nghiệp. Đội ngũ kỹ thuật hỗ trợ rất tận tâm và nhiệt tình. Mình sẽ tiếp tục ủng hộ Tino 🥰.
Rất tuyệt vời🙆🙆🙆🙆🙆🙆🙆🙆🙆
Xét về tầm giá thì TinoHost rất đáng để mua và sử dụng lâu dài.
Dịch vụ chất lượng, ủng hộ 1 năm nay rồi
tuyệt vời quá đi,tuyệt vời quá đi
Tốc độ ổn định, tư vấn nhiệt tình
mới tham gia, mong mọi người hỗ trợ thêm
Tốc độ khá tốt với gói rẻ nhất 9k
Giao dịch nhanh,support nhanh và tận tình,chuyển miền nhanh,Hosting Ok
mua sản phẩm dịch vụ tinhot rất tốt tặng ad 5tr ** luon nè🥰🥰🥰
tinohost
một truong những nơi bán hosting rẻ, chất lượng dành cho anh em nào cần để làm web
mua tại : tinohost.com
mình đã mua 2 tên miền + hosting của Tino Host . quả nhiên hiệu quả SEO cải thiện đáng kể và chứng chỉ bảo mật HTTPS miễn phí của Tino Host cũng ko kém phần quang trọng cho việc SEO website của mình
Tino host là một trong nhà cung cấp tốt nhất mình từng sử dụng. Với ưu đãi khuyến mại nhiều, giá thành rẻ kèm theo đó là sự support tuyệt vời của các admin. Nếu ai chưa lựa chọn được nhà cung cấp cho bản thân mình thì Tinohost sẽ là câu trả lời tốt nhất.
dịch vụ tốt, đội ngũ support nhiệt tình, cảm ơn #tinohost
Uy tín, chất lượng, nhân viên hỗ trợ nhiệt tình
mua 2 domain tại tinohost dùng rất chất lượng
Đã mua 02 domain và hosting tại TinoHost, hài lòng cách tư vấn và chăm sóc khách hàng của TinoHost :)
Giá rẻ cấu hình mạnh, black friday là sự bùng nổ của Tino
Hay web bán tài nguyên rất ngon
dịch vụ tốt, mua luôn host chất lượng cao của công ty nhân dịp blackfriday, cảm ơn #tinohost
Dịch vụ rất tốt, nhân viên tận tình.
Hỗ trợ nhiệt tình nhất trong các nhà cung cấp mih từng dùng. Không những server mạnh, ưu đãi có 1 không 2 mà còn nhiều plugin pro bản quyền đính kèm nữa. Quyết định gắn bó "Lifetime" với tino 😁
Dịch vụ tốt hỗ trợ nhanh chóng
Thích cách tư vấn tận tình và nhanh gọn của Tino mỗi khi có vấn đề trục trặc. Hosting ổn định, giá rẻ tốt lắm nhé mọi người
mình có mua 2 tên msiền của tino, mình rât thích cách tư vấn và chăm sóc khách hàng tại đây. Ngoài ra giá domain khá rẻ, phù hợp cho mọi người. 5 sao
Dịch vụ tốt, support nhiệt tình
tinohost tuyệt vời giá cả hợp lý
domain mua rất rẻ :))))
tốt, chất lượng, hostingok
Hosting tốt, giá cả cạnh tranh
Tuyệt vời , Hosting quá ổn
Chất lượng lắm ạ. Domain mua rẻ nhất thị trường
Dịch vụ tốt và chất lượng
Chất lượng lắm ạ. Domain mua rẻ nhất thị trường
Tino Host dùng quá ngon đi !💥💥💥💥💥
Tôi đã mua domain và hosting của các nhà cung cấp khác rồi, nhưng thực sự thấy không tốt bằng Tino, ngoài ra còn hỗ trợ rất tốt. Cảm ơn tino nhiều!
Next Reviews
CÔNG TY CỔ PHẦN TẬP ĐOÀN TINO
Trụ sở chính: L17-11, Tầng 17, Tòa nhà Vincom Center, Số 72 Lê Thánh Tôn,  Phường Bến Nghé, Q. 1, TP. Hồ Chí Minh

Văn phòng kinh doanh: Số 42 Trần Phú, Phường 4, Quận 5, TP HCM
GPKD số 0315679836 do Sở KH và ĐT TP Hồ Chí Minh cấp
Hotline: 0364 333 333
Góp ý/Phản ánh dịch vụ: 0933 000 886