2012-07-17 22 views
5

Có bất kỳ chức năng tích hợp nào trong ngôn ngữ lập trình C để sắp xếp các mảng không? Hay tôi phải viết các chức năng của riêng mình?Chức năng tích hợp để sắp xếp các mảng trong C

+16

'qsort' trong 'stdlib.h' – nhahtdh

+1

@nhahtdh không gửi nó như là câu trả lời? – triclosan

+1

@triclosan: Viết 1 nhận xét lót sẽ tốn ít công sức hơn là viết một câu trả lời chính thức. – nhahtdh

Trả lời

9

Check-out qsort

Cú pháp:

#include <stdlib.h>
void qsort(void *buf, size_t num, size_t size, int (*compare)(const void *, const void *));

Mô tả:

Chức năng qsort() loại buf (trong đó có mặt hàng num, mỗi kích thước kích thước) sử dụng Sắp xếp nhanh. Hàm so sánh được sử dụng để so sánh các mục trong buf. so sánh sẽ trả về giá trị âm nếu đối số đầu tiên nhỏ hơn số thứ hai, bằng không nếu chúng bằng nhau và dương nếu đối số đầu tiên lớn hơn số thứ hai. qsort() sắp xếp buf theo thứ tự tăng dần.

+0

Cảm ơn rất nhiều: D Cũng nhờ những người trả lời: D – CluelessNoob

+2

LƯU Ý: qsort() không nhất thiết là quicksort. (thường là vậy, mặc dù) – wildplasser

7

Bạn có thể sử dụng qsort trong stdlib.h. Đây là thuật toán sắp xếp nhanh, có độ phức tạp thời gian trung bình của O (nlogn) và độ phức tạp của trường hợp xấu nhất của O (n).C99 standard và thậm chí C11 Standard mới hơn không ủy quyền việc triển khai hoặc độ phức tạp của hàm. Tuy nhiên, rất có khả năng việc thực hiện phổ biến sẽ sử dụng thuật toán tạo ra độ phức tạp thời gian trung bình của O (nlogn) (tối ưu để sắp xếp theo so sánh).

Bạn có thể sử dụng điều này để sắp xếp bất kỳ loại mảng nào (thậm chí struct) - nhưng bạn phải cung cấp một hàm so sánh để so sánh giữa 2 phần tử của mảng.

+2

LƯU Ý: qsort() không nhất thiết là quicksort. (thường là vậy, mặc dù) – wildplasser

+0

@wildplasser: Đã chỉnh sửa. – nhahtdh

+0

Bạn có thể liên kết đến [Tiêu chuẩn C11] (http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf) ngày nay :) – pmg

6

qsort cũng được biết đến. Có những người khác cũng như heapsort, mergesort vv Vui lòng kiểm tra liên kết để biết thêm chi tiết.

Xin lưu ý rằng tất cả đều lấy chức năng so sánh làm đầu vào, làm cho chúng dễ dàng sử dụng được với kiểu dữ liệu gốc cũng như người dùng được tạo.

+1

Tôi tò mò về thư viện chuẩn nào tồn tại ' mergesort' và 'heapsort' ... hóa ra chúng nằm trong libc của FreeBSD. Mát mẻ. +1 (Lưu ý: chúng dường như không tồn tại trong glibc.) –

+0

Chúng là các hàm C không chuẩn. – nhahtdh

0

cú pháp đơn giản:

int function (const void * a, const void * b) {return (*(int*)a-(int*)b);} 
`qsort(arr_name , sizeofarray , sizeof(int), function); 
Các vấn đề liên quan