Tất cả những gì bạn cần biết về Quicksort trong C ++



Bài viết này sẽ cung cấp cho bạn kiến ​​thức chi tiết và toàn diện về cách triển khai Quicksort trong C ++ với các ví dụ.

Có rất nhiều thuật toán sắp xếp. Tìm sự phù hợp phù hợp cho ứng dụng của bạn là một công việc đòi hỏi sự hiểu biết ngắn gọn về các yếu tố như hiệu suất, thời gian phức tạp, độ dài của mã, v.v. của một thuật toán cụ thể. Trong bài đăng này, chúng ta sẽ xem xét tất cả các khái niệm cơ bản cần thiết để triển khai Quicksort trong C ++ theo thứ tự sau:

Hiểu thuật toán Quicksort

Giống như Hợp nhất Sắp xếp , Quicksort tuân theo chiến lược chia để trị. Bằng cách sử dụng chiến lược chia để trị, chúng ta chia bài toán thành nhiều bài toán con và giải chúng một cách đệ quy. Đầu tiên, chúng ta sẽ hiểu từng bước toàn bộ quá trình và sau đó, với sự trợ giúp của một ví dụ, chúng ta sẽ phát triển sự hiểu biết sâu sắc về toàn bộ quá trình.





  1. Đầu tiên, chúng tôi sẽ yêu cầu mảng chưa được sắp xếp từ người dùng.

  2. Khi chúng ta có mảng chưa được sắp xếp, chúng ta cần chọn một giá trị tổng hợp từ mảng. Chúng tôi có thể chọn bất kỳ giá trị nào.



  3. Khi chúng ta chọn điểm xoay, sau đó chúng ta cần sắp xếp các phần tử khác của mảng theo cách sao cho tất cả các phần tử nhỏ hơn giá trị trục xoay phải được đặt ở bên phải của giá trị trục và tất cả các phần tử lớn hơn giá trị trục giá trị được đặt ở bên phải của giá trị trục.

  4. Chúng tôi thực hiện bước 3 cho đến khi chúng tôi nhận được mảng đã sắp xếp của mình.

Bây giờ, hãy xem xét một ví dụ và triển khai thuật toán và xem nó hoạt động như thế nào.



xử lý tệp trong ví dụ java

Xin chào [5, 4, 1, 11, 9, 6, 2, 3] đối với ví dụ này, chúng tôi sẽ luôn coi trục xoay là phần tử ngoài cùng bên phải của danh sách.

Quicksort trong C ++

Hãy đi qua từng bước và hiểu logic mà chúng ta đã sử dụng để giải quyết vấn đề.

  • Đầu tiên, chúng tôi chọn ‘3’ làm trục quay và sắp xếp tất cả các phần tử nhỏ hơn ‘3’ ở bên phải và tất cả các phần tử lớn hơn ‘3’ ở bên phải.

    js lấy độ dài của mảng
  • Tại thời điểm này, chúng ta có 2 bài toán con. Đầu tiên chúng ta hãy giải quyết vấn đề con ở bên phải. Chúng tôi đã chọn một cái làm trục quay và đặt '2' ở bên phải.

  • Để giải quyết vấn đề con thứ hai, chúng ta chọn '6' làm trục và đặt các phần tử như chúng ta đã thảo luận trước đó.

  • Chúng ta có 2 bài toán con nữa. Câu hỏi đầu tiên được giải bằng cách chọn 4 làm trục và câu thứ hai được giải bằng cách chọn 9 làm trục. Cuối cùng, Chúng tôi có mảng đã sắp xếp của chúng tôi với các phần tử được đặt ở chỉ mục gạch dưới.

Ghi chú- Điểm quan trọng cần hiểu ở đây là tất cả các hoạt động diễn ra trong cùng một mảng. Mảng mới không được tạo.

Mã giả cho Quicksort trong C ++

QuickSort (array [], start_index, end_index) {if (start_index

Chương trình của Quicksort trong C ++

Chúng tôi đã hiểu thuật toán và phát triển sự hiểu biết sâu sắc về hoạt động của thuật toán. Hãy triển khai Quicksort trong C ++ và viết một chương trình để sắp xếp một mảng.

sự khác biệt giữa ghi đè phương thức và ghi đè phương thức
#include using namespace std void swap_elements (int * a, int * b) {int temp = * a * a = * b * b = temp} int partition (int array [], int start_index, int end_index) {int pivot = array [end_index] int i = (start_index - 1) for (int j = start_index j<= end_index- 1 j++) { if (array[j] <= pivot) { i++ swap_elements(&array[i], &array[j]) } } swap_elements(&array[i + 1], &array[end_index]) return (i + 1) } void quickSort(int array[], int start_index, int end_index) { if (start_index < end_index) { int partition_index = partition(array, start_index, end_index) quickSort(array, start_index, partition_index - 1) quickSort(array, partition_index + 1, end_index) } } void printArray(int array[], int number) { int i cout<<'Sorted Array: ' for (i = 0 i < number i++) cout << array[i] << ' ' cout << endl } int main() { int Hello[30] int i int NumberofElements cout<>Chi phí thực hiện NumberofE<<'Enter the elements one by one: ' for(i=0i>Xin chào [i]} quickSort (Xin chào, 0, NumberofElements-1) printArray (Xin chào, NumberofElements) return 0}

Đầu ra:

Thời gian phức tạp

Hãy nói về khía cạnh quan trọng nhất của bất kỳ thuật toán sắp xếp nào, tức là độ phức tạp về thời gian. Nó cho chúng ta biết về hiệu suất của thuật toán trong các tình huống khác nhau. Những giá trị này có thể giúp chúng tôi quyết định xem chúng tôi có thể sử dụng thuật toán này cho ứng dụng của mình hay không.

  • Trường hợp tốt nhất- Trên)
  • Trường hợp trung bình- (nlogn)
  • Trường hợp xấu nhất- Trên2)

Với điều này, chúng ta sẽ kết thúc bài viết Quicksort trong C ++ này. Nếu bạn muốn tìm hiểu thêm, hãy xem bởi Edureka, một công ty học trực tuyến đáng tin cậy. Khóa học đào tạo và cấp chứng chỉ Java J2EE và SOA của Edureka được thiết kế để đào tạo bạn về cả khái niệm Java cốt lõi và nâng cao cùng với các khung Java khác nhau như Hibernate & Spring.

Có một câu hỏi cho chúng tôi? Vui lòng đề cập đến nó trong phần nhận xét của blog này và chúng tôi sẽ liên hệ lại với bạn trong thời gian sớm nhất.