Computer >> Máy Tính >  >> Lập trình >> lập trình C

C qsort () so với C ++ sort ()

Ở đâ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.