Ở đây chúng ta sẽ thấy sự khác biệt giữa qsort () trong C và sort () trong C ++.
C cung cấp hàm qsort (), có thể được sử dụng để sắp xếp một mảng. Các đối số và cú pháp của hàm như bên dưới.
void qsort(void *base, size_t num, size_t size, int (*comparator) (const void*, const void*));
Hàm này lấy địa chỉ cơ sở của mảng đó, số phần tử của mảng đó. Kích thước của từng mục trong mảng và một hàm so sánh.
C ++ cung cấp hàm sort (). Điều này hiện diện bên trong C ++ STL. Các đối số và cú pháp như bên dưới.
void sort(T first, T last, Compare c);
Ở đây thứ tự của các phần tử lặp đi lặp lại không được đảm bảo giữ nguyên. Với mục đích đó, chúng ta có thể sử dụng stable_sort được cung cấp bởi C ++ STL.
Sự khác biệt giữa qsort () và sort ()
qsort () trong C | sort () trong C ++ |
---|---|
Nó sử dụng thuật toán quicksort. | Nó sử dụng tính năng giới thiệu. Đây là thuật toán sắp xếp kết hợp. Ở đây các triển khai khác nhau sử dụng thuật toán khác nhau. GNU C ++ STL sử dụng phân loại kết hợp ba phần. Introsort, Quicksort và Insertion Sort. |
Tiêu chuẩn C không nói về tính đơn giản của thuật toán sắp xếp này. | Trong trường hợp này, độ phức tạp là O (n logn) trong trường hợp xấu nhất trong C ++ 11 sort (). Một số phiên bản trước sort () lấy O (n2) trong trường hợp xấu nhất và trong trường hợp trung bình, chúng lấy O (nlogn). |
Thời gian chạy của loại này lớn hơn thansort () | Thời gian chạy ít hơn qsort (). |
qsort () không linh hoạt đối với các dữ liệu kindsof khác nhau. | sort () linh hoạt. Điều này có thể sắp xếp các mảng C, vectơ C ++, C ++ deques và một số vùng chứa khác. |
Kiểu này không phải là kiểu an toàn hơn. Nó sử dụng các con trỏ void không an toàn để truy cập dữ liệu. | Kỹ thuật sắp xếp này an toàn hơn. Nó không yêu cầu bất kỳ con trỏ void không an toàn nào để truy cập dữ liệu. |