2011-02-18 39 views

Trả lời

-3

Tôi nghĩ vậy. std :: list có một phương thức sắp xếp, hoặc bạn có thể gọi sắp xếp từ đó mất 2 vòng lặp, bắt đầu và kết thúc.

3

Điều đó tùy thuộc vào việc triển khai thư viện. Việc triển khai merg hợp là phổ biến nhất, vì nó là trường hợp xấu nhất O (N * logN) trong khi quicksort có thể làm suy giảm thành O (N^2).

This xác nhận. Ngoài ra, theo như tôi biết, một số loại heuristic được sử dụng trên đầu vào để quyết định thuật toán nào là tốt nhất để sử dụng nội bộ để các cuộc gọi khác nhau đến std::sort() có thể sử dụng các thuật toán khác nhau.

+1

Nó có thể là phiên bản ngẫu nhiên của quicksort, vì vậy đối số trường hợp xấu nhất O (N^2) sẽ không giữ cho trường hợp này. – LunaticSoul

0

Từ Wikipedia -

Thuật toán phân loại cụ thể không được ủy quyền và có thể thay đổi trong quá trình triển khai. Sort Wiki Link

+0

Trong trường hợp này, điều này có lẽ đúng, tôi sẽ rất cẩn thận về những gì tôi đã đọc trên Wikipedia. Khi nói đến có một tham chiếu, trích dẫn tiêu chuẩn để thay thế. – ereOn

-3

vì sự phức tạp cao tồi tệ nhất của quicksort (N^2) và tương đối khó khăn để thực hiện trên LINKLIST. Tôi nghĩ rằng sẽ không được thực hiện bằng cách sử dụng quicksort

+4

'std :: sort' không hoạt động trên danh sách được liên kết, do đó, nó không phải là vấn đề. –

32

Có hai thuật toán được sử dụng theo truyền thống.

std::sort là nhiều khả năng sử dụng QuickSort, hoặc ít nhất là một biến thể hơn Sắp xếp nhanh gọi IntroSort, mà "thoái hóa" để HeapSort khi đệ quy đi quá sâu.

Từ tiêu chuẩn:

phức tạp: O (N log (N)) so sánh.

std::stable_sort rất có thể sử dụng MergeSort, vì yêu cầu về độ ổn định. Tuy nhiên lưu ý rằng MergeSort yêu cầu thêm không gian để có hiệu quả.

Từ tiêu chuẩn:

phức tạp: Nó ở N nhất đăng nhập (N) so sánh; nếu có đủ bộ nhớ bổ sung, nó là N log (N).

Tôi chưa thấy một std::sort thực hiện TimSort đó là đầy hứa hẹn và đã được áp dụng trong Python (thủ công cho nó trong thực tế), Java và Android (cho đến nay).

+0

@ maxim-yegorushkin: bài viết trên Wikipedia cũng xuất hiện để yêu cầu chuyển đổi nội dòng thành chèn thay vì heapsort:/ http://en.wikipedia.org/wiki/Sort_(C%2B%2B) "GNU Standard C++ thư viện, ví dụ, sử dụng thuật toán phân loại lai: introsort được thực hiện trước, đến độ sâu tối đa cho bởi 2 × log2 n, trong đó n là số phần tử, theo sau là sắp xếp chèn vào kết quả. " –

Các vấn đề liên quan