Loading docs/basic/quick-sort.md +3 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ 其实,快速排序没有指定应如何具体实现第一步,不论是选择 m 的过程还是划分的过程,都不是只有一种实现方法。 注意,一般我们说的快速排序的时间复杂度是平均为 $O(n\log n)$ ,最坏是 $O(n^2)$ ,只不过实践中几乎不可能达到最坏情况。 一般我们说的快速排序的时间复杂度是平均为 $O(n\log n)$ ,最坏是 $O(n^2)$ ,实践中几乎不可能达到最坏情况。且因为快速排序的内存访问遵循局部性原理,多数情况下快速排序的表现大幅优于堆排序等其他复杂度为 $O(n \log n)$ 的排序算法。 其实,在选择 m 的过程中使用[Median of Medians](https://en.wikipedia.org/wiki/Median_of_medians)算法,就可以保证最坏时间复杂度为 $O(n\log n)$ ,但是由于其过于复杂,实践中一般不使用。 Loading @@ -39,3 +39,5 @@ <https://stackoverflow.com/questions/22339240/what-algorithms-are-used-in-c11-stdsort-in-different-stl-implementations> <https://en.cppreference.com/w/cpp/algorithm/sort> <http://irootlee.com/juicer_locality/> docs/basic/stl-sort.md +2 −2 Original line number Diff line number Diff line ## sort C 函数模板库实现了快速排序,即 `stdlib.h` 当中的 `qsort` 。 C 标准库实现了快速排序,即 `stdlib.h` 当中的 `qsort` 。 但在 OI 相关比赛当中,更为常见的库排序函数是 C++ `algorithm` 库中的 `std::sort` 函数。 Loading @@ -24,7 +24,7 @@ std::sort(a, a + n); ## nth_element 作用是找到选定区间内第 $k$ 大的数,并将所有比它小的数与比它大的数分别置于两侧,返回它的地址。 作用是找到选定区间内第 $k$ 大的数,并将所有比它小的数与比它大的数分别置于两侧,返回它的地址。 原理是未完成的快速排序 Loading Loading
docs/basic/quick-sort.md +3 −1 Original line number Diff line number Diff line Loading @@ -22,7 +22,7 @@ 其实,快速排序没有指定应如何具体实现第一步,不论是选择 m 的过程还是划分的过程,都不是只有一种实现方法。 注意,一般我们说的快速排序的时间复杂度是平均为 $O(n\log n)$ ,最坏是 $O(n^2)$ ,只不过实践中几乎不可能达到最坏情况。 一般我们说的快速排序的时间复杂度是平均为 $O(n\log n)$ ,最坏是 $O(n^2)$ ,实践中几乎不可能达到最坏情况。且因为快速排序的内存访问遵循局部性原理,多数情况下快速排序的表现大幅优于堆排序等其他复杂度为 $O(n \log n)$ 的排序算法。 其实,在选择 m 的过程中使用[Median of Medians](https://en.wikipedia.org/wiki/Median_of_medians)算法,就可以保证最坏时间复杂度为 $O(n\log n)$ ,但是由于其过于复杂,实践中一般不使用。 Loading @@ -39,3 +39,5 @@ <https://stackoverflow.com/questions/22339240/what-algorithms-are-used-in-c11-stdsort-in-different-stl-implementations> <https://en.cppreference.com/w/cpp/algorithm/sort> <http://irootlee.com/juicer_locality/>
docs/basic/stl-sort.md +2 −2 Original line number Diff line number Diff line ## sort C 函数模板库实现了快速排序,即 `stdlib.h` 当中的 `qsort` 。 C 标准库实现了快速排序,即 `stdlib.h` 当中的 `qsort` 。 但在 OI 相关比赛当中,更为常见的库排序函数是 C++ `algorithm` 库中的 `std::sort` 函数。 Loading @@ -24,7 +24,7 @@ std::sort(a, a + n); ## nth_element 作用是找到选定区间内第 $k$ 大的数,并将所有比它小的数与比它大的数分别置于两侧,返回它的地址。 作用是找到选定区间内第 $k$ 大的数,并将所有比它小的数与比它大的数分别置于两侧,返回它的地址。 原理是未完成的快速排序 Loading