{"id":332369,"date":"2022-04-25T09:00:39","date_gmt":"2022-04-25T09:00:39","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=332369"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=332369","title":{"rendered":"<span>\u041c\u0435\u043d\u044f\u0435\u043c std::sort \u0434\u043b\u044f Google<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image.png\" alt=\"image\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image.png\"\/><\/div>\n<p>  \u041c\u044b <a href=\"https:\/\/reviews.llvm.org\/D122780\" rel=\"nofollow noopener noreferrer\">\u043c\u0435\u043d\u044f\u0435\u043c<\/a> <code>std::sort<\/code> \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 libcxx \u043f\u0440\u043e\u0435\u043a\u0442\u0430 LLVM. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0438 \u043a\u0430\u043a\u0438\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f, \u043e \u0431\u0430\u0433\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0437 open source. \u041c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432, \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438 \u0447\u0435\u0433\u043e \u044d\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u043b\u043e, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0437\u0430\u043a\u043e\u043d\u0430 \u0425\u0430\u0439\u0440\u0430\u043c\u0430 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c. \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u0432 open source, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043c\u043e\u0433\u0443 \u043e \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 C++. \u0412\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e\u0431 \u0443\u0441\u0438\u043b\u0438\u044f\u0445, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0431\u0430\u0433\u0430\u043c\u0438. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043c\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043d\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0432\u0441\u0435 \u0432\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<h1>\u0413\u043b\u0430\u0432\u0430 1. \u0418\u0441\u0442\u043e\u0440\u0438\u044f<\/h1>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0435\u0449\u0451 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u0437\u0430\u0440\u043e\u0436\u0434\u0435\u043d\u0438\u044f computer science<sup><a href=\"#footnotes\">1<\/a><\/sup>. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043b\u044e\u0434\u0438 \u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0432 \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0434\u0430\u0436\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438<sup><a href=\"#footnotes\">2<\/a><\/sup> \u2014 \u043e\u043d \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e, \u0433\u0434\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0438 \u0435\u0433\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0442! \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u043e\u0434\u043d\u043e \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u044d\u0432\u043e\u043b\u044e\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0442 \u0434\u0430\u0436\u0435 \u0441\u0435\u0439\u0447\u0430\u0441, \u0443\u043b\u0443\u0447\u0448\u0430\u044f \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u044b \u0438 \u0441\u043d\u0438\u0436\u0430\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0412\u043e \u0432\u0441\u0435\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0435\u0441\u0442\u044c \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0438 \u0432\u044b\u0431\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041e \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f\u0445 \u0432 \u044f\u0437\u044b\u043a\u0430\u0445 \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u043e\u0437\u0436\u0435. \u0421\u043f\u043e\u0440\u044b \u043e \u0442\u043e\u043c, \u043a\u0430\u043a\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043b\u0443\u0447\u0448\u0435, \u043d\u0435 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f \u043d\u0430 Hackernews<sup><a href=\"#footnotes\">3<\/a><\/sup>, \u0432 \u0441\u0442\u0430\u0442\u044c\u044f\u0445<sup><a href=\"#footnotes\">4<\/a><\/sup> \u0438 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445<sup><a href=\"#footnotes\">5<\/a><\/sup>.<\/p>\n<p>  \u0414\u043e\u043d\u0430\u043b\u044c\u0434 \u041a\u043d\u0443\u0442 \u0441\u043a\u0430\u0437\u0430\u043b:<\/p>\n<blockquote><p><em>\u0411\u044b\u043b\u043e \u0431\u044b \u0437\u0434\u043e\u0440\u043e\u0432\u043e, \u0435\u0441\u043b\u0438 \u0431\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d-\u0434\u0432\u0430 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043e\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430\u0434 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c\u0438, \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0444\u0435\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430. \u041e\u0434\u043d\u0430\u043a\u043e, \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u043c\u0435\u0435\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043b\u044e\u0431\u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430. [\u2026] \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043e\u043d\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0438\u043c\u0438.<\/em> \u2014 \u0414\u043e\u043d\u0430\u043b\u044c\u0434 \u041a\u043d\u0443\u0442, \u00ab\u0418\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb, \u0442\u043e\u043c 3<\/p><\/blockquote>\n<p>  <\/p>\n<h2>\u0418\u0441\u0442\u043e\u0440\u0438\u044f C++<\/h2>\n<p>  <code>std::sort<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 C++ \u0441 \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0435\u043d\u0438\u044f \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u043e\u043c \u0421\u0442\u0435\u043f\u0430\u043d\u043e\u0432\u044b\u043c<sup><a href=\"#footnotes\">9<\/a><\/sup> \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0439 \u00abSTL\u00bb, \u0430 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 C++ \u0442\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0431\u044b\u043b\u0430 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u044f \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u00ab\u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u00bb. \u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u0430 \u043d\u0430 At the time the complexity \u0440\u0430\u0432\u043d\u043e\u0439 $inline$O(n \\log n)$inline$ \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 <em>\u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c<\/em>. \u0418\u0437 \u043a\u0443\u0440\u0441\u043e\u0432 Computer Science \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e <em><a href=\"https:\/\/en.wikipedia.org\/wiki\/Quicksort\" rel=\"nofollow noopener noreferrer\">quicksort<\/a><\/em> \u0438\u043c\u0435\u0435\u0442 $inline$O(n \\log n)$inline$ \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 <em>\u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c<\/em>, \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e? \u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 STL.<\/p>\n<h3>\u041a\u0430\u043a \u0431\u044b\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u043f\u0435\u0440\u0432\u0430\u044f <code>std::sort<\/code>?<\/h3>\n<p>  \u0412 \u043d\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 quicksort \u0441 \u043c\u0435\u0434\u0438\u0430\u043d\u043e\u0439 3 (\u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u043e\u0442 (\u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433) \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432). \u0415\u0441\u043b\u0438 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044f \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u0442 \u043c\u0435\u043d\u0435\u0435 16 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043e\u043d\u0430 \u043f\u0440\u0435\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432.<\/p>\n<p>  \u0412\u044b \u0432\u0438\u0434\u0438\u0442\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u044d\u0442\u0430\u043f, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0430 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u00ab\u0441\u0433\u043b\u0430\u0434\u0438\u0442\u044c\u00bb \u043d\u0435\u0442\u043e\u0447\u043d\u044b\u0435 \u0431\u043b\u043e\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 16.<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62653ec7ea15664f98adaa01\" data-style=\"\" id=\"62653ec7ea15664f98adaa01\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 quicksort<\/h2>\n<p>  \u0414\u0430, \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u0430\u0432\u0434\u0430, \u0447\u0442\u043e quicksort \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c $inline$O(n \\log n)$inline$, \u043e\u0434\u043d\u0430\u043a\u043e C++ STL \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u0442\u0440\u0435\u0442\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 <em><strong>comp<\/strong><\/em>:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-3.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-3.png\"\/><\/div>\n<p>  \u042d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0438\u043b\u0438, \u0438\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong><em>comp<\/em><\/strong> \u0438 \u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442 \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0443\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043b\u044e\u0431\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u041d\u0438\u0436\u0435 \u043c\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434:<\/p>\n<pre><code class=\"cpp\">int quadratic(int size) {     int num_solid = 0;     \/\/ gas \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \"\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c\"     int gas = size + 1;     int comparison_count = 0;     std::vector&lt;int> indices(size);     std::vector&lt;int> values(size);     \/\/ \u0438\u043d\u0434\u0435\u043a\u0441\u044b - \u044d\u0442\u043e 0, 1, \u2026, size     \/\/ \u0432\u0441\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b     for (int i = 0; i &lt; size; ++i) {         indices[i] = i;         values[i] = gas;     }     \/\/ \u041f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u043c \u0440\u0430\u0432\u043d\u043e\u043c\u0435\u0440\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445!     std::random_device rd;     std::mt19937 g(rd());     std::shuffle(indices.begin(), indices.end(), g);     sort(indices.begin(), indices.end(), [&amp;](int x, int y) {         comparison_count += 1;         \/\/ \u0415\u0441\u043b\u0438 \u043e\u0431\u0430 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b, \u0437\u0430\u0434\u0430\u0442\u044c \u043b\u0435\u0432\u043e\u0435.         \/\/ \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 gas \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435         if (values[x] == gas &amp;&amp; values[y] == gas) {             values[x] = num_solid++;             return true;         } else if (values[x] == gas) {             return false;         } else if (values[y] == gas) {             return true;         } else {             return values[x] &lt; values[y];         }     });     return comparison_count; }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043b\u044e\u0431\u043e\u0439 <em>\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438<\/em> \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0435\u043c\u0430\u043d\u0442\u0438\u043a\u043e\u0439:<\/p>\n<ol>\n<li>\u041d\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0435\u043a\u0438\u0439 \u043e\u043f\u043e\u0440\u043d\u044b\u0439 $inline$X$inline$ \u0441\u0440\u0435\u0434\u0438 $inline$C$inline$ (\u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430).<\/li>\n<li>\u0420\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e \u043e\u043f\u043e\u0440\u043d\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e \u0441 \u043e\u0431\u043e\u0438\u0445 \u0441\u0442\u043e\u0440\u043e\u043d.<\/li>\n<\/ol>\n<p>  \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u00abgas\u00bb \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0435, \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043b\u0435\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0434\u0432\u0443\u0445 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438 \u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 gas, \u0442\u043e \u043e\u043d \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>  \u041d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0448\u0430\u0433\u0435 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0438\u0437 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c $inline$C$inline$ \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041f\u0440\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 $inline$n &#8212; C$inline$ \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0431\u0443\u0434\u0443\u0442 \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e.<\/p>\n<p>  \u041d\u0430 \u0448\u0430\u0433\u0435 $inline$i$inline$ \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c $inline$C\\cdot i$inline$ \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 \u0432\u0441\u0435 $inline$n-C\\cdot i$inline$ \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0441\u043f\u0440\u0430\u0432\u0430. \u0412\u043e\u0437\u044c\u043c\u0451\u043c $inline$i$inline$ \u0440\u0430\u0432\u043d\u044b\u043c $inline$n\/2C$inline$, \u0438 \u0443\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<p>  \u0415\u0441\u043b\u0438 \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0441 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 STL<sup><a href=\"#footnotes\">10<\/a><\/sup>, \u0442\u043e \u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.<\/p>\n<pre><code class=\"cpp\">int main(int argc, char** argv) {     std::cout &lt;&lt; \"N: comparisons\\n\";     for (int i = 100; i &lt;= 6400; i *= 2) {         std::cout &lt;&lt; i &lt;&lt; \": \" &lt;&lt; quadratic(i) &lt;&lt; \"\\n\";     }     return 0; } \/* N: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f 100: 2773 200: 10623 400: 41323 800: 162723 1600: 645523 3200: 2571123 6400: 10262323 *\/<\/code><\/pre>\n<p>  \u041a\u0430\u043a\u0443\u044e \u0431\u044b \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u044b \u043d\u0435 \u0432\u043d\u043e\u0441\u0438\u043b\u0438, \u0434\u0430\u0436\u0435 quicksort-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f <code>std::sort<\/code> \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u0430 (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430) \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0441\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c.<\/p>\n<p>  \u041f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0432\u044b\u0448\u0435 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0438\u0447\u0435\u0433\u043e \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0438\u0441\u043a\u0443\u0441\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c, \u0445\u043e\u0442\u044c \u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u0430\u043c\u0438 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u00ab\u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e\u00bb \u0441\u043b\u0443\u0447\u0430\u044f.<\/p>\n<h2>\u041e\u0442\u0445\u043e\u0434 \u043e\u0442 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f Quicksort \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0431\u044b\u043b\u043e \u043f\u0440\u043e\u0432\u0435\u0434\u0435\u043d\u043e \u0414\u0443\u0433\u043b\u0430\u0441\u043e\u043c \u041c\u0430\u043a\u0438\u043b\u0440\u043e\u0435\u043c<sup><a href=\"#footnotes\">11<\/a><\/sup> \u0432 1998 \u0433\u043e\u0434\u0443, \u043e\u043d\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u043b\u043e\u0441\u044c <em>\u201cAntiquicksort\u201d<\/em>. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043e\u043d\u043e \u043f\u043e\u0432\u043b\u0438\u044f\u043b\u043e \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043a \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 <code>std::sort<\/code> $inline$O(n \\log n)$inline$ \u0434\u043b\u044f \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u0430 \u043d\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e, \u0438 \u044d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u043d\u0435\u0441\u0435\u043d\u043e \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 C++11. \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u044b\u0437\u0432\u0430\u043d\u043e \u0442\u0435\u043c, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u0441\u043e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f $inline$O(n \\log n)$inline$.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u044d\u0442\u043e\u043c \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u043b\u0430\u0441\u044c.<\/p>\n<h2>\u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 C++?<\/h2>\n<p>  \u0412 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 C++ \u0435\u0441\u0442\u044c \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442 \u0441 \u0444\u043e\u0440\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u043a\u043e\u0439 <em>\u00ab\u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00bb<\/em>. \u0415\u0449\u0451 \u043e\u0434\u043d\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u044b\u0437\u043e\u0432 <code>std::nth_element<\/code>.<\/p>\n<h3>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 <code>std::nth_element<\/code>?<\/h3>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u043d\u0430\u0445\u043e\u0434\u0438\u0442 <code>n-\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442<\/code> \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435. \u0415\u0441\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435, \u0442\u043e <code>std::nth_element(first, nth, last, comp)<\/code> \u2014 \u044d\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<ul>\n<li>\u042d\u043b\u0435\u043c\u0435\u043d\u0442, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 <code>nth<\/code>, \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0442\u043e\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0439 \u043f\u043e\u0437\u0438\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 <code>[first, last)<\/code> \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/li>\n<li>\u0412\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <code>nth<\/code> \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043f\u043e\u0441\u043b\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <code>nth<\/code>.<\/li>\n<\/ul>\n<p>  \u0412\u044b \u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0432 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <em>\u00ab\u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c\u00bb<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-4.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-4.png\"\/><\/div>\n<p>  \u042d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0437-\u0437\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 <sup><a href=\"#footnotes\">12<\/a><\/sup>. \u041e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u043e\u0441\u043f\u0440\u0438\u0438\u043c\u0447\u0438\u0432 \u043a \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0442\u0440\u044e\u043a\u0430\u043c \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0438 GNU, \u0438 LLVM.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-6.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-6.png\"\/><\/div>\n<p>  \u0412 \u0432\u0435\u0440\u0441\u0438\u0438 LLVM\/clang \u043e\u043d \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u0443\u0435\u0442 \u0434\u043e \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 GNU $inline$2 \\cdot n \\cdot \\log_2 n$inline$ \u043f\u0440\u0438 $inline$n = 1600,3200,6400$inline$ \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0432\u0435\u043d $inline$34060, 74520, 161841$inline$, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0438\u0437\u043a\u043e \u043a \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u0430\u043c. \u0415\u0441\u043b\u0438 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e<sup><a href=\"#footnotes\">13<\/a><\/sup>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c, \u0447\u0442\u043e fallback-\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0432\u044b\u0431\u043e\u0440 \u043a\u0443\u0447\u0438, \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u044f \u043a\u0443\u0447\u0443 \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u044f \u0438\u0437 \u043d\u0435\u0451 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b. \u0410 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043a\u0443\u0447\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u043d\u0430\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 <code>nth<\/code> \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0438\u0445 \u2014 \u044d\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c median of medians<sup><a href=\"#footnotes\">16<\/a><\/sup>, \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u0443\u044e \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0443. \u041d\u0430\u043c \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e\u0441\u044c \u043e\u043a\u043e\u043b\u043e \u0434\u0432\u0430\u0434\u0446\u0430\u0442\u0438 \u043b\u0435\u0442, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0435\u0435, \u0438 \u044d\u0442\u043e \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0410\u043d\u0434\u0440\u0435\u044e \u0410\u043b\u0435\u043a\u0441\u0430\u043d\u0434\u0440\u0435\u0441\u043a\u0443<sup><a href=\"#footnotes\">14<\/a><\/sup>. \u0412 \u043c\u043e\u0451\u043c \u043f\u043e\u0441\u0442\u0435 \u043e\u0431 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445 \u0432\u044b\u0431\u043e\u0440\u0430 \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u0438\u0437\u043b\u043e\u0436\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e (\u0438 \u0435\u0441\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0430\u043c\u0438\u043c \u0410\u043d\u0434\u0440\u0435\u0435\u043c!). \u041c\u044b \u0432\u044b\u044f\u0432\u0438\u043b\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043d\u0430 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0442\u0438\u043f\u0430 <code>SELECT * from table ORDER BY x LIMIT N<\/code>.<\/p>\n<p>  <a href=\"https:\/\/danlark.org\/2020\/11\/11\/miniselect-practical-and-generic-selection-algorithms\/\" rel=\"nofollow noopener noreferrer\">Miniselect: Practical and Generic Selection\u00a0Algorithms<\/a><\/p>\n<h2>\u0427\u0442\u043e \u0441\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0441 <code>std::sort<\/code>?<\/h2>\n<p>  \u0412 \u043d\u0435\u0439 \u043d\u0430\u0447\u0430\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443, \u0438\u043b\u0438 introsort, \u043f\u043e\u0432\u0435\u0440\u0445 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u0438\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439 quicksort, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0435\u0435, \u0442\u043e $inline$2 \\log_2 n$inline$, \u0438 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043a \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 (heap sort). \u0414\u0430\u0436\u0435 \u0432 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438 \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438<sup><a href=\"#footnotes\">15<\/a><\/sup> \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 introsort.<\/p>\n<p>  \u0412\u043e\u0442 \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 introsort \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 GNU:<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62653ec7cfffb2b489681b50\" data-style=\"\" id=\"62653ec7cfffb2b489681b50\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0418\u0441\u0442\u043e\u0440\u0438\u044f LLVM<\/h2>\n<p>  \u041a\u043e\u0433\u0434\u0430 LLVM \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e STL \u0434\u043b\u044f C++0x, \u0425\u043e\u0432\u0430\u0440\u0434 \u0425\u0438\u043d\u043d\u0430\u043d\u0442 \u0441\u043e\u0437\u0434\u0430\u043b \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u0430\u0446\u0438\u044e<sup><a href=\"#footnotes\">6<\/a><\/sup> \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f. \u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u0438 \u0432\u0441\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image.png\"\/><\/div>\n<p>  <i>\u0421\u043b\u0430\u0439\u0434 \u0425\u043e\u0432\u0430\u0440\u0434\u0430 \u0425\u0438\u043d\u043d\u0430\u043d\u0442\u0430 \u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435, 2010 \u0433\u043e\u0434<\/i><\/p>\n<p>  \u042d\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u0438\u043b\u043e \u043d\u0430\u0441 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0435 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b \u0438 \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0436\u043d\u043e \u0438\u0445 \u0431\u0430\u043b\u0430\u043d\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c?<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u0430\u0436\u0435 \u0432 Google, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043c\u043d\u043e\u0433\u043e protobuf, \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0430\u0441\u0442\u044b\u0435 \u0432\u044b\u0437\u043e\u0432\u044b <code>std::sort<\/code>, \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043e\u0442 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438<sup><a href=\"#footnotes\">7<\/a><\/sup>, \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0439 \u0432\u0441\u0435 \u043c\u0435\u0442\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0432 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0438 \u043f\u043e\u043b\u0435\u0439:<\/p>\n<pre><code class=\"cpp\">struct FieldNumberSorter {   bool operator()(const FieldDescriptor* left,                   const FieldDescriptor* right) const {     \/\/ \u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u043c\u0435\u0442\u043e\u043a.     return left->number() &lt; right->number();   } }; void Reflection::ListFieldsMayFailOnStripped(   const Message&amp; message, bool should_fail,   std::vector&lt;const FieldDescriptor*>* output) const {   \/\/ \u041e\u0431\u0445\u043e\u0434\u0438\u043c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443 \u0438\u0445 \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f.   for (int i = 0; i &lt;= last_non_weak_field_index; i++) {     const FieldDescriptor* field = descriptor_->field(i);     if (FieldSize(message, field) > 0) {       output->push_back(field);     }   }   \/\/ \u0421\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u0438\u0445 \u043d\u043e\u043c\u0435\u0440\u0443 \u043c\u0435\u0442\u043a\u0438   std::sort(output->begin(), output->end(), FieldNumberSorter()); }<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"cpp\">message GoogleMessage2 {   \/\/         \u0442\u0438\u043f      \u0438\u043c\u044f   \u043c\u0435\u0442\u043a\u0430   \/\/       vvvvvv vvvvvv  vvv   optional string field1 = 1;   optional int64 field3 = 3;   optional int64 field4 = 4;   optional int64 field30 = 30;   optional bool field75 = 75 [default = false];   \/\/ \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043d\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443, 1, 3, 4, 30, 75, 6, 2   optional string field6 = 6;   optional bytes field2 = 2;   \/\/ \u2026 }<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u0435\u0440\u0432\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u0435: \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u00ab\u043f\u043e\u0447\u0442\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435\u00bb \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u044e\u0442\u0441\u044f. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u043c\u0438 \u0441\u043b\u0443\u0447\u0430\u044f\u043c\u0438 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\/\u0443\u0431\u044b\u0432\u0430\u043d\u0438\u0435, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u0438\u043c\u0435\u0441\u0438 \u0438\u0445, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0440\u0438\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0438\u043b\u0438 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. TL;DR; \u043d\u0430\u043c \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0434\u043e\u0441\u0442\u0438\u0447\u044c \u0432 \u044d\u0442\u043e\u043c \u043e\u0441\u043e\u0431\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432, \u043e\u0434\u043d\u0430\u043a\u043e \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u044b\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438.<\/p>\n<h2>\u0422\u0435\u043e\u0440\u0438\u044f: presortedness<\/h2>\n<p>  \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c Presortedness \u0432\u043f\u0435\u0440\u0432\u044b\u0435 \u0431\u044b\u043b \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u043d \u0432 <sup><a href=\"#footnotes\">8<\/a><\/sup>:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-2.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-2.png\"\/><\/div>\n<p>  \u0423\u0441\u043b\u043e\u0432\u0438\u0435 1 \u2014 \u044d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 2 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043d\u0430\u0441 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0430 \u043d\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 3 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u043c\u044b \u0441\u043c\u043e\u0436\u0435\u043c \u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430 \u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 4 \u2014 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0445 \u0447\u0430\u0441\u0442\u0435\u0439: \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c $inline$XY$inline$, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c $inline$Y$inline$, \u0443\u0441\u043b\u043e\u0432\u0438\u0435 5 \u2014 \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u043e\u0431\u0449\u0451\u043d\u043d\u044b\u0439 \u0432\u0435\u0440\u0445\u043d\u0438\u0439 \u043f\u0440\u0435\u0434\u0435\u043b \u2014 \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u044e $inline$a$inline$ \u0437\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>  \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043e\u0446\u0435\u043d\u043e\u043a presortedness, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440<\/p>\n<ul>\n<li><em>m<sub>01<\/sub><\/em>: 1 \u2014 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e, 0 \u2014 \u0435\u0441\u043b\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \u0414\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0433\u043b\u0443\u043f\u0430\u044f \u043e\u0446\u0435\u043d\u043a\u0430.<\/li>\n<li><em>Block<\/em>: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0437\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0442\u043e\u0442 \u0436\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438.<\/li>\n<li><em>Mono<\/em>: \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 <em>X<\/em>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 |<em>X<\/em>| \u043c\u0438\u043d\u0443\u0441 \u0440\u0430\u0437\u043c\u0435\u0440 <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Longest_increasing_subsequence\">\u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u043d\u0435\u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0449\u0435\u0439\u0441\u044f \u043f\u043e\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/a> <em>X<\/em>.<\/li>\n<li><em>Dis<\/em>: \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c\u043e\u0435 \u0438\u043d\u0432\u0435\u0440\u0441\u0438\u0435\u0439.<\/li>\n<li><em>Runs<\/em>: \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u0443\u043c\u0435\u043d\u044c\u0448\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 <em>X<\/em> \u043c\u0438\u043d\u0443\u0441 \u043e\u0434\u0438\u043d.<\/li>\n<li>\u0418 \u0442. \u0434.<\/li>\n<\/ul>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0446\u0435\u043d\u043a\u0438 presortedness \u043b\u0443\u0447\u0448\u0435 \u0434\u0440\u0443\u0433\u0438\u0445, \u0442\u043e \u0435\u0441\u0442\u044c \u0435\u0441\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u043e\u0446\u0435\u043d\u043a\u0438 (\u043f\u043e\u0434 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 $inline$T(X)$inline$ \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 $inline$X$inline$ \u0432\u0435\u0434\u0451\u0442 \u0441\u0435\u0431\u044f \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0446\u0435\u043d\u043a\u0438: $inline$T(X) \\leq C\\max(X, \\log|\\mathrm{below}(X, M)|)$inline$), \u0442\u043e \u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u043e\u0439. \u0418 \u0437\u0434\u0435\u0441\u044c \u0442\u0435\u043e\u0440\u0438\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e. \u0412 \u0442\u0435\u043e\u0440\u0438\u0438 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u00ab\u043e\u0431\u0449\u0430\u044f\u00bb \u043e\u0446\u0435\u043d\u043a\u0430 presortedness, \u043e\u0434\u043d\u0430\u043a\u043e \u043e\u043d\u0430 \u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u0430 \u0438 \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0435\u0451 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/github.com\/Morwenn\/cpp-sort\/wiki\/images\/mops-partial-ordering.png\" data-src=\"https:\/\/github.com\/Morwenn\/cpp-sort\/wiki\/images\/mops-partial-ordering.png\"\/><\/div>\n<p>  <i><a href=\"https:\/\/arxiv.org\/pdf\/1407.6183.pdf\" rel=\"nofollow noopener noreferrer\">NeatSort \u2014 A practical adaptive algorithm<\/a><\/i><\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u0440\u0435\u0434\u0438 \u0432\u0441\u0435\u0445 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043e\u0446\u0435\u043d\u043e\u043a \u0442\u043e\u043b\u044c\u043a\u043e Mono, Dis \u0438 Runs \u0432\u044b\u043f\u043e\u043b\u044f\u043d\u044e\u0442\u0441\u044f \u0437\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u044f (\u0434\u0440\u0443\u0433\u0438\u0435 \u0437\u0430 $inline$\\Omega(n \\log n)$inline$ \u0438 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u0438\u043c\u0435\u044e\u0442 \u043b\u0438 \u043e\u043d\u0438 \u043c\u0435\u043d\u044c\u0448\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c). \u0415\u0441\u043b\u0438 \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u044d\u0442\u0438\u0445 \u043e\u0446\u0435\u043d\u043e\u043a, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u044d\u043c\u043f\u043b\u043e\u0432 \u0438\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 $inline$\\Omega(n \\log n)$inline$ \u0432 \u0441\u0430\u043c\u0443 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443, \u0447\u0442\u043e \u043f\u043b\u043e\u0445\u043e \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438. \u041c\u044b \u0431\u044b \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u043d\u043e \u0432 \u0446\u0435\u043b\u043e\u043c \u043f\u043e\u043a\u0430 \u043c\u044b \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043a\u0440\u043e\u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043f\u043b\u044e\u0441 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430.<\/p>\n<p>  \u0427\u0442\u043e \u0436, \u043d\u0430\u0432\u0435\u0440\u043d\u043e, \u0432\u0430\u043c \u043d\u0430\u0434\u043e\u0435\u043b\u0430 \u0442\u0435\u043e\u0440\u0438\u044f \u0438 \u0432\u044b \u0433\u043e\u0442\u043e\u0432\u044b \u043a \u0447\u0435\u043c\u0443-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u043d\u043e\u043c\u0443.<\/p>\n<h2>\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0435\u043d\u0438\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 LLVM<\/h2>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 LLVM libcxx \u0431\u044b\u043b\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u0434\u043e C++11, \u043f\u0435\u0440\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0442\u043e\u0436\u0435 \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u043d\u0430 quicksort. \u0412 \u0447\u0451\u043c \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 GNU?<\/p>\n<p>  \u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f libcxx \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043e\u0441\u043e\u0431\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u041a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0434\u043b\u0438\u043d\u043e\u0439 5 \u0438\u043b\u0438 \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0445 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>  <code>sort4.cpp<\/code>:<\/p>\n<pre><code class=\"cpp\">template &lt;class _Compare, class _ForwardIterator> unsigned __sort4(_ForwardIterator __x1, _ForwardIterator __x2, _ForwardIterator __x3, _ForwardIterator __x4,                  _Compare __c) {   unsigned __r = _VSTD::__sort3&lt;_Compare>(__x1, __x2, __x3, __c);   if (__c(*__x4, *__x3)) {     swap(*__x3, *__x4);     ++__r;     if (__c(*__x3, *__x2)) {       swap(*__x2, *__x3);       ++__r;       if (__c(*__x2, *__x1)) {         swap(*__x1, *__x2);         ++__r;       }     }   }   return __r; }<\/code><\/pre>\n<p>  <code>sort5.cpp<\/code>:<\/p>\n<pre><code class=\"cpp\">template &lt;class _Compare, class _ForwardIterator> unsigned __sort5(_ForwardIterator __x1, _ForwardIterator __x2, _ForwardIterator __x3,                                 _ForwardIterator __x4, _ForwardIterator __x5, _Compare __c) {   unsigned __r = _VSTD::__sort4&lt;_Compare>(__x1, __x2, __x3, __x4, __c);   if (__c(*__x5, *__x4)) {     swap(*__x4, *__x5);     ++__r;     if (__c(*__x4, *__x3)) {       swap(*__x3, *__x4);       ++__r;       if (__c(*__x3, *__x2)) {         swap(*__x2, *__x3);         ++__r;         if (__c(*__x2, *__x1)) {           swap(*__x1, *__x2);           ++__r;         }       }     }   }   return __r; }<\/code><\/pre>\n<p>  \u041f\u0440\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0438\u043f\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0434\u043b\u0438\u043d\u043e\u0439 \u0434\u043e 30 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438. \u0422\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u043d\u0438\u0445 \u0432\u043f\u043e\u043b\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>  \u0415\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0430\u0432\u043d\u043e, \u0438 \u0434\u043b\u044f \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0447\u0442\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u0434\u043e \u043f\u0440\u0435\u0434\u0435\u043b\u0430 \u0432 8 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a: \u0435\u0441\u043b\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 8 \u043f\u0430\u0440\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0433\u0434\u0435 $inline$x_i > x_{i + 1}$inline$, \u0442\u043e \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438, \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0435\u0451. \u042d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432.<\/p>\n<pre><code class=\"cpp\">  const unsigned __limit = 8;   unsigned __count = 0;   for (_RandomAccessIterator __i = __j + difference_type(1); __i != __last; ++__i) {     if (__comp(*__i, *__j)) {       value_type __t(_VSTD::move(*__i));       _RandomAccessIterator __k = __j;       __j = __i;       do {         *__j = _VSTD::move(*__k);         __j = __k;       } while (__j != __first &amp;&amp; __comp(__t, *\u2013__k));       *__j = _VSTD::move(__t);       if (++__count == __limit)         return ++__i == __last;     }     __j = __i;   }<\/code><\/pre>\n<p>  <\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62653ec858b073b4525f787f\" data-style=\"\" id=\"62653ec858b073b4525f787f\" width=\"\"><\/div>\n<\/div>\n<p>  <i>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 libcxx LLVM \u043f\u0440\u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/i><\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u0435\u043c, \u0442\u043e \u043c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e libstdcxx \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 libcxx, \u0447\u0442\u043e \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0432\u0430\u0436\u043d\u043e. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043e\u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0432 4,5 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435!<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62653ec807a8cd4fd1f4b5ac\" data-style=\"\" id=\"62653ec807a8cd4fd1f4b5ac\" width=\"\"><\/div>\n<\/div>\n<p>  <i>libcxx \u0434\u043b\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/i><\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/62653ec841d6a34fa4f7f15b\" data-style=\"\" id=\"62653ec841d6a34fa4f7f15b\" width=\"\"><\/div>\n<\/div>\n<p>  <i>libstdcxx \u0434\u043b\u044f \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u044e\u0449\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u0435\u0434\u0438\u0430\u043d\u0430, \u0440\u0430\u0432\u043d\u0430\u044f 5, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 quicksort partition \u0431\u043e\u043b\u044c\u0448\u0435 1000. \u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0442\u043b\u0438\u0447\u0438\u0439; \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u0441\u0430\u043c\u043e\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 \u044d\u0442\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d\u0430 \u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b, \u0447\u0442\u043e \u0437\u0430\u0442\u0440\u0430\u0442\u043d\u043e, \u043d\u043e \u0432\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u0434\u0430\u0451\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432 Google \u0441\u043c\u0435\u043d\u0438\u043b\u0438 libstdcxx \u043d\u0430 libcxx, \u0442\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f (\u043d\u0430 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432) \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u043f\u043e\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u043e\u043c \u043d\u0430 <code>std::sort<\/code>. \u0421 \u0442\u0435\u0445 \u043f\u043e\u0440 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u043c\u0435\u043d\u044f\u043b\u0441\u044f, \u043d\u043e \u0434\u0430\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u043b\u0438\u0441\u044c.<\/p>\n<h2>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a libcxx LLVM \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430\u0441\u044c \u0434\u043b\u044f C++03, \u043f\u0435\u0440\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u043d\u0430\u0446\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 <em>\u0441\u0440\u0435\u0434\u043d\u0438\u0439<\/em> \u0441\u043b\u0443\u0447\u0430\u0439, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438 \u0432\u044b\u0448\u0435. \u041a \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043e\u0431\u0440\u0430\u0449\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0432 2014, 2017 \u0438 2018 \u0433\u043e\u0434\u0430\u0445<sup><a href=\"#footnotes\">17, 18<\/a><\/sup>.<\/p>\n<p>  \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043c\u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0436\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 GNU \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e introsort. \u041c\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043c\u043e\u0436\u0435\u0442 \u0443\u0439\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0441\u0442\u0430\u0432\u0448\u0430\u044f\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0443\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 heapsort. \u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0439 \u0437\u0430\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0432\u043d\u044b\u043c $inline$2n \\log_2 n$inline$. \u0422\u0430\u043a \u043a\u0430\u043a \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f heapsort \u0440\u0430\u0432\u043d\u0430 $inline$O(n \\log n)$inline$, \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u043e\u0436\u0435 \u0438\u043c\u0435\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0435\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f $inline$O(n \\log n)$inline$. \u041a\u043e\u043c\u043c\u0438\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f<sup><a href=\"#footnotes\">19<\/a><\/sup> \u0431\u044b\u043b \u0432\u043d\u0435\u0441\u0451\u043d \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0432\u0435\u0442\u043a\u0443 LLVM \u0438 \u0432\u044b\u043f\u0443\u0449\u0435\u043d \u0432 LLVM 14.<\/p>\n<pre><code class=\"cpp\">void __introsort(_RandomAccessIterator __first, _RandomAccessIterator __last,             difference_type __depth) {   \/\/ \u2026   while (true) {     if (__depth == 0) {       \/\/ \u041e\u0442\u043a\u0430\u0442 \u043a heapsort, \u043a\u0430\u043a \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0432 Introsort.       _VSTD::__partial_sort&lt;_Compare>(__first, __last, __last);       return;     }     \u2013__depth;    \/\/ \u2026 }  template &lt;typename _Number> inline _Number __log2i(_Number __n) {   _Number __log2 = 0;   while (__n > 1) {     __log2++;     __n >>= 1;   }   return __log2; }    void __sort(_RandomAccessIterator __first, _RandomAccessIterator __last) {   difference_type __depth_limit = 2 * __log2i(__last \u2013 __first);   _VSTD::__introsort(__first, __last, __depth_limit); }<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0421\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u0438\u0437 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043c\u0438\u0440\u0430 \u043f\u043e\u043f\u0430\u043b\u043e \u0432 heapsort?<\/h3>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u043d\u0430\u043c \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043a\u0430\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0443\u0448\u043b\u0430 \u043d\u0430 \u0433\u043b\u0443\u0431\u043e\u043a\u0438\u0435 \u0443\u0440\u043e\u0432\u043d\u0438 quicksort, \u0438 \u043c\u044b \u0443\u0431\u0435\u0434\u0438\u043b\u0438\u0441\u044c, \u0447\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0442\u044b\u0441\u044f\u0447 \u0432\u0441\u0435\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>std::sort<\/code> \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a heapsort.<\/p>\n<p>  \u042d\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u0438\u0435. \u041e\u043d\u043e \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439, \u0442. \u0435. \u043d\u0435 \u0431\u044b\u043b\u043e \u043d\u0430\u0439\u0434\u0435\u043d\u043e \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0438\u043b\u0438 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 Quicksort \u0432\u043f\u043e\u043b\u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u0432\u0435\u0440\u0433\u0430\u0442\u044c\u0441\u044f \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u0430\u043c.<\/p>\n<h1>\u0413\u043b\u0430\u0432\u0430 2. \u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043b\u0435\u0433\u043a\u043e, \u043d\u0435 \u043f\u0440\u0430\u0432\u0434\u0430 \u043b\u0438?<\/h1>\n<p>  \u041f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0432\u044b\u0438\u0433\u0440\u0430\u0442\u044c \u0432 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445: \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u0432\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0435 integer, \u0442\u043e API \u043d\u0435 \u0432\u043e\u043b\u043d\u0443\u0435\u0442 \u0432\u0430\u0448\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f; \u0435\u043c\u0443 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0431\u044b\u043b \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e C++ API \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043b\u044f\u043c\u0431\u0434\u0430-\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438. \u041c\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0438\u0445 \u00ab\u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438\u00bb. \u041e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u043d\u0430\u0440\u0443\u0448\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u044f \u043e \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u0418\u043d\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u00ab\u043d\u0438\u0447\u044c\u044f \u043c\u043e\u0436\u0435\u0442 \u0440\u0435\u0448\u0430\u0442\u044c\u0441\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443\u00bb.<\/p>\n<pre><code class=\"cpp\">std::vector&lt;std::pair&lt;int, int>> first_elements_equal{{1, 1}, {1, 2}}; std::sort(first_elements_equal.begin(),           first_elements_equal.end(),           [](const auto&amp; lhs, const auto&amp; rhs) {             \/\/ \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441 \u0447\u0430\u0441\u0442\u044c\u044e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445.             return lhs.first &lt; rhs.first;           }); \/\/ \u0421\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u044f \u043e\u0431\u043e \u0432\u0441\u0435\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \/\/ \u041e\u0448\u0438\u0431\u043a\u0430, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u043b\u0438 1, \u0438\u043b\u0438 2. assert(first_elements_equal[0].second == 1);<\/code><\/pre>\n<p>  \u0412 \u0431\u043e\u043b\u0435\u0435 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f SQL-\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0442\u0430\u043a\u043e\u0433\u043e \u0442\u0438\u043f\u0430:<\/p>\n<div class=\"scrollable-table\">\n<table>\n<tbody>\n<tr>\n<td>id_1<\/td>\n<td>id_2<\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td><strong>3<\/strong><\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td><strong>2<\/strong><\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p><i><a href=\"https:\/\/extendsclass.com\/postgresql-online.html\" rel=\"nofollow noopener noreferrer\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 PostgreSQL<\/a><\/i><\/p>\n<pre><code class=\"cpp\">create table example (id_1 integer, id_2 integer);  \u2014 Insert lots of equal id_1 insert into example (id_1, id_2) values (1, 1); insert into example (id_1, id_2) values (0, 3); insert into example (id_1, id_2) values (0, 2); insert into example (id_1, id_2) values (0, 3); insert into example (id_1, id_2) values (0, 2); insert into example (id_1, id_2) values (0, 3); insert into example (id_1, id_2) values (1, 3);  \u2014 Order only by the first element, second \u2014 is undefined for equal first elements. select * from example order by id_1;<\/code><\/pre>\n<p>  <\/p>\n<div class=\"scrollable-table\">\n<table>\n<tbody>\n<tr>\n<td>id_1<\/td>\n<td>id_2<\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td><strong>2<\/strong><\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td><strong>3<\/strong><\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>2<\/td>\n<\/tr>\n<tr>\n<td>0<\/td>\n<td>3<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>1<\/td>\n<\/tr>\n<tr>\n<td>1<\/td>\n<td>3<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>  <i><a href=\"https:\/\/extendsclass.com\/mysql-online.html\" rel=\"nofollow noopener noreferrer\">\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 MySQL<\/a><\/i><\/p>\n<p>  \u0418 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438\u044e \u043b\u044e\u0431\u044f\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432. \u041e\u0434\u043d\u0430\u043a\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0440\u0430\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043a\u043e\u043f\u0430\u043d \u0432 \u043a\u043e\u0434\u0435, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d\u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0441\u043b\u044b\u0448\u0430\u043b\u0438. \u042d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/www.hyrumslaw.com\/\">\u0437\u0430\u043a\u043e\u043d\u0430 \u0425\u0430\u0439\u0440\u0430\u043c\u0430<\/a>.<\/p>\n<blockquote><p><i>\u041f\u0440\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 API, \u043d\u0435 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e \u0432\u044b \u043e\u0431\u0435\u0449\u0430\u0435\u0442\u0435 \u0432 \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0435: \u0432\u0441\u0435 \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c\u044b\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u0430\u0448\u0435\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u043a\u043e\u0433\u043e-\u0442\u043e.<\/i> \u2014 \u0425\u0430\u0439\u0440\u0430\u043c \u0420\u0430\u0439\u0442<\/p><\/blockquote>\n<p>  \u0415\u0441\u043b\u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u0435\u043b\u0438\u043a\u0438, \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u0431\u0438\u0432\u0430\u0442\u044c \u0441 \u0442\u043e\u043b\u043a\u0443: \u043c\u044b \u0447\u0442\u043e-\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u043c \u0438\u043b\u0438 \u0442\u0435\u0441\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0445\u0440\u0443\u043f\u043a\u0438\u0439, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0435? \u0417\u043e\u043b\u043e\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0435\u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u0442\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0438 \u043d\u0435 \u043f\u0440\u0438\u043d\u0443\u0436\u0434\u0430\u044e\u0442 \u043d\u0438 \u043a \u043a\u0430\u043a\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u041e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0430\u044e\u0442 \u043d\u0430\u043c \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0441\u044f. \u041d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u0430 \u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u044d\u0442\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439; \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0430\u043c \u0434\u043e\u043b\u0436\u0435\u043d \u0440\u0435\u0448\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043d \u0445\u043e\u0447\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u0441\u043b\u0443\u0447\u0430\u0438, \u0442\u043e \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u044e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u2014 \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u044b \u043d\u0430\u0448\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c? \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u0443\u0440\u043e\u0432\u044b\u0439 \u0443\u0440\u043e\u043a \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0441\u043f\u043e\u0441\u043e\u0431\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c \u0441 \u0437\u043e\u043b\u043e\u0442\u044b\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438. \u041b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u0437\u043e\u043b\u043e\u0442\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u044e\u043d\u0438\u0442-\u0442\u0435\u0441\u0442\u044b \u0438\u043b\u0438 \u0443\u0434\u0435\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<h2>\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432?<\/h2>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043d\u0435\u0440\u0430\u0437\u043b\u0438\u0447\u0438\u043c\u044b \u043f\u0440\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f (\u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0433\u043e\u0440\u0441\u0442\u043a\u0443 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0432\u043d\u043e\u0441\u044f\u0449\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435), \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043f\u0435\u0440\u0435\u0434 \u0441\u0430\u043c\u0438\u043c \u0432\u044b\u0437\u043e\u0432\u043e\u043c <code>std::sort<\/code>. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0438 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>  \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 LLVM \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043a\u0438<sup><a href=\"#footnotes\">20<\/a><\/sup> \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>std::sort<\/code>, <code>std::nth_element<\/code>, <code>std::partial_sort<\/code>.<\/p>\n<pre><code class=\"cpp\">\/\/ _LIBCPP_DEBUG_RANDOMIZE_RANGE - \u044d\u0442\u043e std::shuffle  template &lt;class _RandomAccessIterator, class _Compare> void sort(_RandomAccessIterator __first, _RandomAccessIterator __last,           _Compare __comp) {   \/\/ \u0420\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b.   _LIBCPP_DEBUG_RANDOMIZE_RANGE(__first, __last);   typedef typename __comp_ref_type&lt;_Compare>::type _Comp_ref;   \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443.   _VSTD::__sort&lt;_Comp_ref>(_VSTD::__unwrap_iter(__first),                            _VSTD::__unwrap_iter(__last), _Comp_ref(__comp)); }  template &lt;class _RandomAccessIterator, class _Compare> void nth_element(_RandomAccessIterator __first, _RandomAccessIterator __nth,                  _RandomAccessIterator __last, _Compare __comp) {   \/\/ \u0420\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b.   _LIBCPP_DEBUG_RANDOMIZE_RANGE(__first, __last);   typedef typename __comp_ref_type&lt;_Compare>::type _Comp_ref;   \/\/ \u0412\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u044e\u044e nth_element.   _VSTD::__nth_element&lt;_Comp_ref>(__first, __nth, __last, __comp);   \/\/ \u041e\u0431\u0435 \u0447\u0430\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044e.    _LIBCPP_DEBUG_RANDOMIZE_RANGE(__first, __nth);   if (__nth != __last) {     _LIBCPP_DEBUG_RANDOMIZE_RANGE(++__nth, __last);   } }  template &lt;class _RandomAccessIterator, class _Compare> void partial_sort(_RandomAccessIterator __first, _RandomAccessIterator __middle,                   _RandomAccessIterator __last, _Compare __comp) {   \/\/ \u0420\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b.   _LIBCPP_DEBUG_RANDOMIZE_RANGE(__first, __last);   typedef typename __comp_ref_type&lt;_Compare>::type _Comp_ref;   _VSTD::__partial_sort&lt;_Comp_ref>(__first, __middle, __last, __comp);   \/\/ \u0417\u0430\u043c\u044b\u043a\u0430\u044e\u0449\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044e.   _LIBCPP_DEBUG_RANDOMIZE_RANGE(__middle, __last); }<\/code><\/pre>\n<p>  <\/p>\n<h3>\u0422\u0435\u0445\u043d\u0438\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439<\/h3>\n<p>  \u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0442\u0435\u0445\u043d\u0438\u043a\u0443 <code>ASLR<\/code> (address space layout randomization)<sup><a href=\"#footnotes\">21<\/a><\/sup>, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 seed. \u042d\u0442\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0442\u0443 \u0436\u0435 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043d\u043e \u043d\u0435 \u043f\u0440\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u043e\u043d\u0430\u0445, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u0441\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043b\u043e\u0438\u0441\u0442\u044b\u043c\u0438 \u0438 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u043e\u043d\u0438 \u0441\u043b\u043e\u043c\u0430\u043b\u0438\u0441\u044c. \u0414\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0438\u0445 ASLR, seed \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u0442\u0435\u0445\u043d\u0438\u043a \u043e\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 <code>&lt;random><\/code> \u0431\u044b\u043b\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a <code>&lt;algorithm><\/code> \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u043b \u043e\u0442 <code>&lt;random><\/code> \u0438 \u0432 \u0442\u0430\u043a\u043e\u0439 \u043d\u0438\u0437\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0439 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440.<\/p>\n<pre><code class=\"cpp\">static uint_fast64_t __seed() {   \/\/ \u0430\u0434\u0440\u0435\u0441 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d, \u0435\u0441\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0441 ASLR.   static char __x;   return reinterpret_cast&lt;uintptr_t>(&amp;__x); }<\/code><\/pre>\n<p>  \u0422\u0430\u043a\u0430\u044f \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u044b\u043b\u0430 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u0439 \u0441\u0431\u043e\u0440\u043a\u0438, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043e\u0432\u043a\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c.<\/p>\n<h3>\u041e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c partial \u0438 nth<\/h3>\n<p>  \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u0433\u043b\u044f\u0434\u0435\u0442\u044c\u0441\u044f \u043a \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0432\u044b\u0448\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c \u0432 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u0442\u043e \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u043c\u0435\u0436\u0434\u0443 <code>std::nth_element<\/code> \u0438 <code>std::partial_sort<\/code>. \u041e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c.<\/p>\n<p>  <code>std::partial_sort<\/code> \u0438 <code>std::nth_element<\/code> \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 \u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043b\u0435\u0433\u043a\u043e \u0437\u0430\u043f\u0443\u0442\u0430\u0442\u044c\u0441\u044f. \u041e\u0431\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 3 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440\u0430:<\/p>\n<ul>\n<li><code>begin<\/code> \u2014 \u043d\u0430\u0447\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430<\/li>\n<li><code>nth<\/code>\u00a0or\u00a0<code>middle<\/code> \u2014 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u0438 \u0438\u043c\u044f) \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445<\/li>\n<li><code>end<\/code> \u2014 \u043a\u043e\u043d\u0435\u0446 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430<\/li>\n<\/ul>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>std::partial_sort<\/code> \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>middle<\/code>, \u043e\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c <code>middle<\/code> \u2013 \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u0412 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <code>std::nth_element<\/code> \u044d\u0442\u043e\u0442 \u0441\u0440\u0435\u0434\u043d\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>nth<\/code>. \u041e\u043d \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d. \u0414\u043b\u044f \u0432\u0441\u0435\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 <code>[begin, nth)<\/code> \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u043b\u0438\u0448\u044c \u0442\u043e, \u0447\u0442\u043e \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u043b\u0438 \u0440\u0430\u0432\u043d\u044b <code>*nth<\/code>, \u043d\u043e \u043d\u0435 \u0437\u043d\u0430\u0435\u043c, \u0432 \u043a\u0430\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  \u042d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043d\u0430\u0439\u0442\u0438 10-\u0439 \u043f\u043e \u043c\u0435\u043d\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/untitled-diagram.drawio.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/untitled-diagram.drawio.png\"\/><\/div>\n<p>  <\/p>\n<pre><code class=\"cpp\">std::vector&lt;int> values = { \/* \u0431\u043e\u043b\u044c\u0448\u0435 10 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 *\/ }; std::nth_element(values.begin(), values.begin() + 9, values.end()); int tenth_element = values[9];  std::vector&lt;int> values = { \/* \u0431\u043e\u043b\u044c\u0448\u0435 10 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 *\/ }; std::partial_sort(values.begin(), values.begin() + 10, values.end()); int tenth_element = values[9];<\/code><\/pre>\n<p>  \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435, \u043f\u043e\u0441\u043b\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u043e\u043d\u043e\u0432 \u0432\u0441\u0435\u0445 \u0442\u0435\u0441\u0442\u043e\u0432 \u0432 Google \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0434\u0430\u0447\u043d\u043e\u0433\u043e \u0432\u0435\u0442\u0440\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u0438 \u043c\u044b \u0432\u044b\u044f\u0432\u0438\u043b\u0438 \u043f\u0430\u0440\u0443 \u0442\u044b\u0441\u044f\u0447 \u0442\u0435\u0441\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b \u043e\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438 \u0432\u044b\u0431\u043e\u0440\u0430. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u043c\u043e\u0433 \u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u043e\u0441\u0442\u0435\u043f\u0435\u043d\u043d\u043e \u0438 \u043d\u0430\u0434\u0451\u0436\u043d\u043e.<\/p>\n<p>  <em>\u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435, \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u043b\u043e\u0441\u044c \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430.<\/em><\/p>\n<h2>\u041a\u0430\u043a\u0438\u0435 \u0441\u0431\u043e\u0438 \u0432\u044b, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u0435?<\/h2>\n<p>  <\/p>\n<h3>\u0417\u043e\u043b\u043e\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b<\/h3>\n<p>  \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b, \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0431\u043e\u0435\u0432 \u0432 \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0437\u043e\u043b\u043e\u0442\u044b\u0445 \u0442\u0435\u0441\u0442\u0430\u0445, \u0438 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0438\u0437\u0431\u0435\u0436\u043d\u043e. \u0418\u0437 \u043c\u0438\u0440\u0430 open source \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 ClickHouse<sup><a href=\"#footnotes\">22, 23<\/a><\/sup>, \u043e\u043d\u0438 \u0442\u043e\u0436\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0441\u0442\u044c.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-11.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-11.png\"\/><\/div>\n<p>  <i>\u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0437\u043e\u043b\u043e\u0442\u044b\u0445 \u0442\u0435\u0441\u0442\u0430\u0445<\/i><\/p>\n<p>  \u0411\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u2014 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0438 \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b.<\/p>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0437\u043e\u043b\u043e\u0442\u044b\u0435 \u0442\u0435\u0441\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u043c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0438 \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u043a\u0430 \u2014 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u0448\u0430\u0440\u0434\u0430? \u0418\u043b\u0438 \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u0436\u0430\u0442\u0438\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>std::sort<\/code> \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u0443\u044e \u0441\u0443\u043c\u043c\u0443 \u043e\u0442 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u043b\u0430\u0441\u044c? \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0445 \u0441\u0443\u043c\u043c, \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0448\u0438\u0431\u043e\u043a, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0438 \u0434\u0430\u0436\u0435 \u043f\u043e\u0442\u0435\u0440\u044e \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0432\u044b \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043d\u0435\u043e\u0436\u0438\u0434\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442\u044c \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430\u043c \u0432 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435. \u0417\u0430\u043a\u043e\u043d \u0425\u0430\u0439\u0440\u0430\u043c\u0430 \u0432\u043e \u0432\u0441\u0451\u043c \u0441\u0432\u043e\u0451\u043c \u0432\u0435\u043b\u0438\u043a\u043e\u043b\u0435\u043f\u0438\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u043c\u043e\u0433\u043b\u0438 \u043c\u0438\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u043d\u044a\u0435\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043f\u0430\u0440\u0443 \u043c\u0435\u0441\u0442 \u0441\u0442\u0430\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.<\/p>\n<h3>\u041e\u0445, \u0447\u0451\u0440\u0442, \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c<\/h3>\n<p>  \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 <code>std::sort<\/code> \u043a <code>std::stable_sort<\/code>, \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c. \u041c\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u043e \u0442\u043e\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 <code>stable_sort<\/code> \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0431\u0443\u0434\u0443\u0442 \u0432 \u0442\u043e\u043c \u0436\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0447\u0442\u043e \u0438 \u0434\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-12.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-12.png\"\/><\/div>\n<p>  <\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f, \u0438, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e<\/h3>\n<p>  \u0412\u043e \u043c\u043d\u043e\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445<a href=\"https:\/\/danlarkorg.wordpress.com\/wp-admin\/post.php?post=758&amp;amp;action=edit#footnotes\" rel=\"nofollow noopener noreferrer\"><sup>24<\/sup><\/a>, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0432 Python, Java, Rust, <code>sort()<\/code> \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438, \u043f\u043e-\u043c\u043e\u0435\u043c\u0443, \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0448\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 Rust \u0435\u0441\u0442\u044c <code>.sort_unstable()<\/code>, \u043d\u0435 \u0438\u043c\u0435\u044e\u0449\u0438\u0439 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0439 \u043e\u0431 \u044d\u0442\u043e\u043c \u044f\u0432\u043d\u043e. \u041e\u0434\u043d\u0430\u043a\u043e \u0443 C++ \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0447\u0435\u0433\u043e-\u0442\u043e \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f (\u043f\u0440\u0438\u043d\u0446\u0438\u043f <em>\u00ab\u0442\u044b \u043d\u0435 \u043f\u043b\u0430\u0442\u0438\u0448\u044c \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0448\u044c\u00bb<\/em>). \u041f\u043e \u043d\u0430\u0448\u0438\u043c \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u043c <code>std::stable_sort<\/code> \u0431\u044b\u043b\u0430 \u043d\u0430 10-15% \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435, \u0447\u0435\u043c <code>std::sort<\/code>, \u0438 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b\u0430 \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c. \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0434\u043b\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 C++ \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e. \u041c\u043d\u0435 \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e Rust \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0445 \u0441\u043c\u044f\u0433\u0447\u0438\u0442\u044c, \u0430 C++ \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u043c\u044f\u0433\u043a\u0438\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0445 \u0443\u0436\u0435\u0441\u0442\u043e\u0447\u0435\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/rust_cpp_tight.drawio.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/rust_cpp_tight.drawio.png\"\/><\/div>\n<p>  <\/p>\n<h3>\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0431\u0430\u0433\u0438<\/h3>\n<p>  \u041c\u044b \u043d\u0430\u0448\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u043c\u0435\u0441\u0442, \u0433\u0434\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u0438 \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b\u0438 \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u041f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0438\u043c \u0438\u0445 \u043f\u043e \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u043d\u0438\u044f \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<h4>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0434\u0432\u043e\u0438\u0447\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/h4>\n<p>  \u041f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0431\u0443\u043b\u0435\u0432\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0435\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430, \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 <code>std::sort<\/code>.<\/p>\n<pre><code class=\"cpp\">struct Data {   bool has_property;   \/\/ \u2026 };  std::vector&lt;Data> data(FillData()); std::sort(data.begin(), data.end(), [](const Data&amp; lhs, const Data&amp; rhs) {   return lhs.has_property &lt; rhs.has_property; });<\/code><\/pre>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0438\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e \u0431\u0443\u043b\u0435\u0432\u044b\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b <code>std::partition<\/code> \u0438 \u0435\u0433\u043e \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f <code>std::stable_partition<\/code>.<\/p>\n<pre><code class=\"cpp\">struct Data {   bool has_property;   \/\/ \u2026 };  std::vector&lt;Data> data(FillData()); \/*  \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 [first, last) \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c,  \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 p \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true, \u043f\u0440\u0435\u0434\u0448\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0438  \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0440\u0435\u0434\u0438\u043a\u0430\u0442 p \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 false. \u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a  \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f. *\/ std::partition(data.begin(), data.end(), [](const Data&amp; other) {   \/\/ \u041e\u0442\u0440\u0438\u0446\u0430\u043d\u0438\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u0441\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432\u043f\u0440\u0430\u0432\u043e.   return !other.has_property; });<\/code><\/pre>\n<p>  \u0414\u0430\u0436\u0435 \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0441\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u043a\u0440\u0430\u0442\u043d\u043e\u0441\u0442\u0438, \u043b\u0443\u0447\u0448\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <code>std::partition<\/code>, \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0434\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u0438.<\/p>\n<h4>\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0433\u043e<\/h4>\n<p>  \u041c\u044b \u0447\u0430\u0441\u0442\u043e \u0432\u0441\u0442\u0440\u0435\u0447\u0430\u043b\u0438 \u043f\u0430\u0442\u0442\u0435\u0440\u043d sort+resize.<\/p>\n<pre><code class=\"cpp\">\/\/ \u041d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e n \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0435\u0439 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 score. std::sort(vector.begin(), vector.end(),           HasHigherScore()); vector.resize(n);<\/code><\/pre>\n<p>  \u0418\u0437 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043a\u043e\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u043d\u0435\u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0441\u0435\u0433\u043e vector (\u043f\u043e\u0437\u0436\u0435 $inline$n$inline$-\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430) \u043d\u0435 \u043d\u0443\u0436\u043d\u0430. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u044d\u0442\u043e \u043d\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u0435\u0442.<\/p>\n<pre><code class=\"cpp\">\/\/ We only care about the n entities with the highest scores. std::partial_sort(vector.begin(),                   vector.begin() + n,                   vector.end(),                   HasHigherScore()); vector.resize(n);<\/code><\/pre>\n<p>  \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0430 <code>std::partial_sort<\/code>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0435\u0442\u0435\u0440\u043c\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c, \u043d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440.<\/p>\n<h4>\u042f\u0437\u044b\u043a C++ \u0441\u043b\u043e\u0436\u0435\u043d<\/h4>\n<p>  \u0415\u0441\u043b\u0438 \u0432 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0442\u0438\u043f, \u0442\u043e C++ \u043d\u0435 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0434\u0438\u0442 \u043e\u0431 \u044d\u0442\u043e\u043c \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 <code>-Weverything<\/code>. \u041d\u0430 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u0435 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 float \u0441 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u043e\u043c <code>std::greater&lt;int><\/code> \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u044b\u0434\u0430\u043d\u043e \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-13.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-13.png\"\/><\/div>\n<p>  <\/p>\n<h4>\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u0440\u043e\u0433\u043e\u043c\u0443 \u0441\u043b\u0430\u0431\u043e\u043c\u0443 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044e<\/h4>\n<p>  \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u0432 C++ \u043b\u044e\u0431\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0438 <code>std::sort<\/code> \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e\u043c\u0443 \u0441\u043b\u0430\u0431\u043e\u043c\u0443 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044e, \u0447\u0442\u043e \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>\u041d\u0435\u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c: $inline$x &lt; x$inline$ \u043b\u043e\u0436\u043d\u043e<\/li>\n<li>\u0410\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u044e: $inline$x &lt; y$inline$ \u0438 $inline$y &lt; x$inline$ \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0431\u044b\u0442\u044c \u0438\u0441\u0442\u0438\u043d\u043d\u044b\u043c\u0438<\/li>\n<li>\u0422\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c: $inline$x &lt; y$inline$ \u0438 $inline$y &lt; z$inline$ \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 $inline$x &lt; z$inline$<\/li>\n<li>\u0422\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043d\u0435\u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e\u0441\u0442\u0438: $inline$x == y$inline$ \u0438 $inline$y == z$inline$ \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 $inline$x == z$inline$, \u0433\u0434\u0435 $inline$x == y$inline$ \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e $inline$x &lt; y$inline$ \u0438 $inline$y &lt; x$inline$ \u043b\u043e\u0436\u043d\u044b.<\/li>\n<\/ul>\n<p>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043b\u043e\u0433\u0438\u0447\u043d\u044b \u0438 \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0438\u0445 \u0432\u0441\u0435. \u041f\u0435\u0440\u0432\u044b\u0435 \u0442\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0437\u0430\u0434\u0430\u044e\u0442 \u0441\u0442\u0440\u043e\u0433\u043e\u0435 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u0435, \u0430 \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043d\u0435\u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432.<\/p>\n<p>  \u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0434\u043e\u0433\u0430\u0434\u0430\u0442\u044c\u0441\u044f, \u043c\u044b \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c \u0432\u0441\u0435\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445, \u044f \u043d\u0438\u0436\u0435 \u043f\u043e\u043a\u0430\u0436\u0443 \u0441\u043a\u0440\u0438\u043d\u0448\u043e\u0442\u044b \u0442\u043e\u0433\u043e, \u0433\u0434\u0435 \u044f \u0438\u0445 \u043d\u0430\u0448\u0451\u043b \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 Github codesearch (<a href=\"https:\/\/cs.github.com\" rel=\"nofollow noopener noreferrer\">https:\/\/cs.github.com<\/a>). \u0418 \u044f \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0441\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u0438\u0441\u043a\u0430\u0442\u044c \u0431\u0430\u0433\u0438, \u0441\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435, \u0447\u0442\u043e \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u044d\u043a\u0441\u043f\u043b\u043e\u0439\u0442\u0430\u0445.<\/p>\n<h4>\u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u043d\u0435\u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0438<\/h4>\n<p>  \u041f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u0448\u043e\u0443, \u0438\u0437\u0443\u0447\u0438\u0442\u0435 \u0435\u0433\u043e.<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043b\u0430\u0439\u0434\u0448\u043e\u0443<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/second_slide.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/second_slide.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/first_slide.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/first_slide.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/third_slide.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/third_slide.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/forth_slide.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/forth_slide.png\"\/><\/div>\n<\/div><\/div>\n<p>  \u0412\u0441\u0435 \u043e\u043d\u0438 \u043d\u0430\u0440\u0443\u0448\u0430\u044e\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043d\u0435\u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u0430 <code>comp(x, x)<\/code> \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 true. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0441\u043a\u0430\u0436\u0435\u0442\u0435, \u0447\u0442\u043e \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u043a \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0442\u0435\u0441\u0442\u044b \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442.<\/p>\n<h4>30 \u0438 31 \u044d\u043b\u0435\u043c\u0435\u043d\u0442. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0438 SIGSEGV<\/h4>\n<p>  \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043e 30 \u0434\u043b\u044f \u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0438 \u0434\u043e 6 \u0434\u043b\u044f \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u044b\u0445) \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 LLVM\/libcxx \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438, \u0430 \u043f\u0440\u0438 \u0431\u041e\u043b\u044c\u0448\u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a quicksort. \u041e\u0434\u043d\u0430\u043a\u043e <strong>\u0435\u0441\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043d\u0435 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0435\u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0438 \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0438<\/strong>, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0441 31 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 <strong>segfault<\/strong>, \u0445\u043e\u0442\u044f \u0441 30 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u043e. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435 \u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432\u043f\u0440\u0430\u0432\u043e \u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435, \u043a\u0430\u043a \u0438 \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0432\u044b\u0448\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-14.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-14.png\"\/><\/div>\n<p>  <i><a href=\"https:\/\/gcc.godbolt.org\/z\/17r76q7eo\" rel=\"nofollow noopener noreferrer\">https:\/\/gcc.godbolt.org\/z\/17r76q7eo<\/a><\/i><\/p>\n<p>  \u041c\u044b \u0432\u0438\u0434\u0435\u043b\u0438, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0438\u0448\u0443\u0442 \u0442\u0435\u0441\u0442\u044b \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432, \u043e\u0434\u043d\u0430\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0441\u0442\u0451\u0442, <code>std::sort<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a SIGSEGV, \u0430 \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0443\u0441\u0442\u0438\u0442\u044c; \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c \u0430\u0442\u0430\u043a\u0438 \u0434\u043b\u044f \u0432\u044b\u043b\u0435\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  \u042d\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 libcxx, \u0447\u0442\u043e\u0431\u044b \u0436\u0434\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u043e\u0436\u043d\u044b\u043c, \u0432\u0435\u0434\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u0447\u0442\u043e \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u0434\u0432\u0430 \u0440\u0430\u0432\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0418\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0438\u0434\u0443\u0449\u0438\u0439 \u0432\u0432\u0435\u0440\u0445 \u043f\u043e\u0438\u0441\u043a \u0437\u0430\u0449\u0438\u0449\u0451\u043d, \u043d\u043e \u043d\u0435 \u0438\u0434\u0443\u0449\u0438\u0439 \u0432\u043d\u0438\u0437. \/\/ \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u043c \u0438\u0434\u0443\u0449\u0438\u0439 \u0432\u043d\u0438\u0437 \u043f\u043e\u0438\u0441\u043a \u0437\u0430\u0449\u0438\u0442\u043e\u0439. \/\/ __m \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0437\u0430\u0449\u0438\u0449\u0430\u0435\u0442 \u0438\u0434\u0443\u0449\u0438\u0439 \u0432\u0432\u0435\u0440\u0445 __i   while (__comp(*__i, *__m))     ++__i;<\/code><\/pre>\n<p>  <\/p>\n<h4>\u041d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435 \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043d\u0435\u0441\u0440\u0430\u0432\u043d\u0438\u043c\u043e\u0441\u0442\u0438<\/h4>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/transitivity.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/transitivity.png\"\/><\/div>\n<p>  <i><a href=\"https:\/\/webrtc-review.googlesource.com\/c\/src\/+\/251681\" rel=\"nofollow noopener noreferrer\">https:\/\/webrtc-review.googlesource.com\/c\/src\/+\/251681<\/a><\/i><\/p>\n<p>  \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440, \u0433\u0434\u0435 \u043d\u0430\u0440\u0443\u0448\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435.<\/p>\n<p>  \u0425\u0443\u0434\u0448\u0435\u0435, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0432 \u0442\u0430\u043a\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439: \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b (\u0431\u0435\u0437 segfaults; \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0434\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u0442\u0430\u0442\u044c\u044f \u0438 \u0442\u0430\u043a \u0443\u0436\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0434\u043b\u0438\u043d\u043d\u0430\u044f), \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-18.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-18.png\"\/><\/div>\n<p>  <i><a href=\"https:\/\/gcc.godbolt.org\/z\/c71qzM97f\" rel=\"nofollow noopener noreferrer\">https:\/\/gcc.godbolt.org\/z\/c71qzM97f<\/a><\/i><\/p>\n<p>  \u0418 \u0441\u043d\u043e\u0432\u0430, \u0435\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u043d\u044c\u0448\u0435 7 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438, \u0438 \u043d\u0435\u043b\u044c\u0437\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c <code>std::is_sorted<\/code> \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0425\u043e\u0442\u044f \u0442\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435, \u0435\u0433\u043e <strong>\u043e\u0447\u0435\u043d\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c<\/strong> \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430\u043c\u0438 \u043e\u0447\u0438\u0441\u0442\u043a\u0438 \u0438\u043b\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438, \u0438 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u044e\u0442\u0441\u044f.<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cpp\">std::vector&lt;double> vector_of_doubles(FillData()); std::sort(vector_of_doubles.begin(), vector_of_doubles.end());<\/code><\/pre>\n<p>  \u041f\u043e\u0447\u0435\u043c\u0443? \u041f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e double\/float \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c <code>NaN<\/code>, \u0447\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 <code>x &lt; NaN<\/code> \u0438 <code>NaN &lt; x<\/code> \u043b\u043e\u0436\u043d\u044b, \u0430 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e <code>x<\/code> \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u043d\u043e <code>NaN<\/code>, \u0442\u043e \u0435\u0441\u0442\u044c \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e <code>x<\/code> \u043c\u044b \u0438\u043c\u0435\u0435\u043c <code>x == NaN<\/code>, \u043d\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e <code>x == NaN<\/code> \u0438 <code>y == NaN<\/code> \u043d\u0435 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u044e\u0442 <code>x == y<\/code>.<\/p>\n<p>  \u0418\u0442\u0430\u043a, \u0435\u0441\u043b\u0438 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c <code>NaN<\/code> \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0435, \u0432\u044b\u0437\u043e\u0432 <code>std::sort<\/code> \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c\u0443 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044e. \u042d\u0442\u043e \u0447\u0430\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<div class=\"oembed\">\n<div class=\"tm-iframe_temp\" data-src=\"https:\/\/embedd.srv.habr.com\/iframe\/6263b8cda25813b4776efd3f\" data-style=\"\" id=\"6263b8cda25813b4776efd3f\" width=\"\"><\/div>\n<\/div>\n<p>  <\/p>\n<h4>\u041f\u043e\u0441\u0442\u043e\u0439\u0442\u0435, \u043d\u043e \u0432\u0435\u0434\u044c \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0439 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0441\u043b\u0430\u0431\u043e\u0439 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043a\u0443\u0431\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f<\/h4>\n<p>  \u0414\u043b\u044f \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0439 \u0441\u0442\u0440\u043e\u0433\u043e\u0439 \u0441\u043b\u0430\u0431\u043e\u0439 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0432\u0441\u0435 \u0442\u0440\u043e\u0439\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 $inline$O(n^3)$inline$. \u0414\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 $inline$O(n^2)$inline$ \u044d\u0442\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438, \u0447\u0435\u043c $inline$O(n \\log n)$inline$, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0430\u0436\u0435 \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430 \u0440\u0430\u0437\u0443\u043c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f.<\/p>\n<p>  \u0418 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0442\u043e, \u0447\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u043e \u0431\u044b \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432. \u041c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0442\u0440\u043e\u0439\u043a\u0438 $inline$\\min(20, n)$inline$ \u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b\u0438 \u0432\u0441\u0435 \u0431\u0430\u0433\u0438, \u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u043c \u043e \u043d\u0438\u0445. \u0421\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e. \u042d\u0442\u043e \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043e \u0432 LLVM, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043c\u043d\u0435 \u043d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<h4>\u0423 std::nth_element \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0431\u0430\u0433\u043e\u0432 \u043a \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u044b\u0448\u0435 \u0432\u0441\u0435\u0433\u043e. \u0418 \u0432\u043e\u0442 \u043f\u043e\u0447\u0435\u043c\u0443<\/h4>\n<p>  \u0425\u043e\u0442\u044f <code>std::sort<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0438 \u0431\u044b\u043b\u043e \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0431\u043e\u0439\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u0435\u0432, \u043c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f <code>std::nth_element<\/code> \u0438 <code>std::partial_sort<\/code> \u043d\u0430\u0445\u043e\u0434\u0438\u043b\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0431\u0430\u0433\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0431\u043e\u0439\u043d\u044b\u0439 \u0442\u0435\u0441\u0442\u043e\u0432\u044b\u0439 \u0441\u043b\u0443\u0447\u0430\u0439. \u042f \u0441\u043e\u0437\u0434\u0430\u043b \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 codesearch, \u0438\u0449\u0443\u0449\u0438\u0439 \u0434\u0432\u0430 \u0431\u043b\u0438\u0437\u043a\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430 <code>std::nth_element<\/code>, \u0438 \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u043b \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u043d\u0430\u0439\u0442\u0438 \u0431\u0430\u0433\u0438 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e (\u0432\u0441\u0435 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <sup><a href=\"#footnotes\">25<\/a><\/sup>):<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0421\u043b\u0430\u0439\u0434\u0448\u043e\u0443<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_1.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_1.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_2.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_2.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_3.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_3.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_4.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_4.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_5.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_5.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_6.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_6.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_7.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_7.png\"\/><\/div>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_8.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/nth_8.png\"\/><\/div>\n<\/div><\/div>\n<p>  \u0412\u0441\u0435 \u043e\u043d\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0442 \u043e\u0434\u043d\u043e\u043c\u0443 \u0438 \u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0443: \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432\u0430 <code>nth_element<\/code>. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0430\u0433\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u0430 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438:<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/untitled-diagram.drawio-1.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/untitled-diagram.drawio-1.png\"\/><\/div>\n<p>  \u0418 \u0434\u0430, \u044d\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0447\u0430\u0441\u0442\u043e, \u044f \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043c\u043d\u043e\u0433\u043e \u0431\u0430\u0433\u043e\u0432, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u043b\u043e \u0434\u0435\u0441\u044f\u0442\u044c \u043c\u0438\u043d\u0443\u0442 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b github codesearch. \u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u043b\u0435\u0433\u043a\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a <code>nth<\/code> \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0437\u043e\u0432\u0430. \u0411\u0443\u0434\u044c\u0442\u0435 \u0430\u043a\u043a\u0443\u0440\u0430\u0442\u043d\u044b.<\/p>\n<h3>\u041a\u0430\u043a \u043d\u0430\u0439\u0442\u0438 \u043f\u043b\u043e\u0445\u0438\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0440\u0435\u0434\u0438 \u0441\u043e\u0442\u0435\u043d \u043c\u0435\u0441\u0442 \u0432 \u0432\u0430\u0448\u0435\u0439 \u043a\u043e\u0434\u043e\u0432\u043e\u0439 \u0431\u0430\u0437\u0435?<\/h3>\n<p>  \u0414\u0430\u0436\u0435 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 <code>std::sort<\/code> \u0432 \u0434\u0435\u0441\u044f\u0442\u043a\u0430\u0445, \u0441\u043e\u0442\u043d\u044f\u0445, \u0430 \u0442\u043e \u0438 \u0442\u044b\u0441\u044f\u0447\u0430\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u043c\u0435\u0441\u0442. \u041a\u0430\u043a \u0436\u0435 \u043d\u0430\u0439\u0442\u0438 \u0432\u044b\u0437\u043e\u0432\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0435 \u043f\u043b\u043e\u0445\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435? \u0418\u043d\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b, \u0438\u043d\u043e\u0433\u0434\u0430 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u043d\u0435\u0442, \u0438 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u2014 \u044d\u0442\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<p>  \u041c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438 <em>inline-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/em><sup><a href=\"#footnotes\">26<\/a><\/sup> (\u0438\u043d\u043e\u0433\u0434\u0430 \u043b\u044e\u0434\u0438, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u043c\u0438, \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0438\u0445 <em>weak symbols<\/em>) C++, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0432 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u0445 \u0438 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0431\u0435\u0437 \u043e\u0448\u0438\u0431\u043e\u043a \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438.<\/p>\n<pre><code class=\"cpp\">\/\/ \u0412 &lt;algorithm> \/\/ \u041e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u043c inline-\u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e. extern void (*ExtremelyHackyCallThatYouWillNotOverride)()     __attribute__((weak)) = nullptr;      \/\/ \u2026  \/\/ \u0414\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \/\/ \u2026   if (ExtremelyHackyCallThatYouWillNotOverride)       ExtremelyHackyCallThatYouWillNotOverride();   _VSTD::__sort&lt;_Comp_ref>(_VSTD::__unwrap_iter(__first), _VSTD::__unwrap_iter(__last), _Comp_ref(__comp)); \/\/ \u2026  \/\/ main.cpp  #include &lt;algorithm>  \/\/ \u0412\u044b\u0432\u043e\u0434\u0438\u0442 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u0442\u0435\u043a\u0430. void backtrace_dumper();  int main(int argc, char** argv) {   ExtremelyHackyCallThatYouWillNotOverride = &amp;backtrace_dumper;   return InvokeRealMain(argc, argv); }<\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043f\u043e\u043c\u043e\u0433\u043b\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0442\u0435\u043a\u043e\u0432 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 <code>std::sort<\/code> \u0438 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u0433\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 \u043e\u043d\u0438 \u043f\u0440\u0438\u0448\u043b\u0438. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u043e\u0435 \u0443\u0447\u0430\u0441\u0442\u0438\u0435, \u043d\u043e \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u0438.<\/p>\n<h5>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043e\u0431 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438<\/h5>\n<p>  \u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <code>backtrace_dumper<\/code> \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 <code>std::sort<\/code>, \u0442\u043e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0432 \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u0443\u044e \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u044e. \u042d\u0442\u043e\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u043d\u0435 \u0441\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0441 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0440\u0430\u0437\u0430, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 Google \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440 TCMalloc, \u0430 \u043e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 <code>std::sort<\/code>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-19-005452_1197x528_scrot.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-19-005452_1197x528_scrot.png\"\/><\/div>\n<p>  <a href=\"https:\/\/github.com\/google\/tcmalloc\/blob\/2bac28c802ce5e93b284803854417cfe6dde0fff\/tcmalloc\/huge_page_filler.h#L1414\" rel=\"nofollow noopener noreferrer\">https:\/\/github.com\/google\/tcmalloc\/blob\/2bac28c802ce5e93b284803854417cfe6dde0fff\/tcmalloc\/huge_page_filler.h#L1414<\/a><\/p>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0441 <code>absl::Mutex<\/code>. \u0411\u044b\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u00ab\u0432\u0435\u0441\u0435\u043b\u043e\u00bb \u0432\u044b\u044f\u0441\u043d\u044f\u0442\u044c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u044e\u0442\u0441\u044f \u0441\u0431\u043e\u044f\u043c\u0438 \u043d\u0435 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c \u0442\u0435\u0441\u0442\u044b.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e <code>backtrace_dumper<\/code>, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u043e\u0442\u043e\u043a\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0439.<\/p>\n<h4>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430<\/h4>\n<p>  \u0418\u043d\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<ul>\n<li>\u041d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b <code>std::sort<\/code> \u0447\u0435\u0440\u0435\u0437 \u044d\u0442\u043e\u0442 \u043f\u043e\u0438\u0441\u043a \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0438<\/li>\n<li>\u0417\u0430\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043e\u0434\u0438\u043d \u0437\u0430 \u0434\u0440\u0443\u0433\u0438\u043c \u043d\u0430 <code>std::stable_sort<\/code><\/li>\n<li>\u0415\u0441\u043b\u0438 \u0442\u0435\u0441\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0437\u0435\u043b\u0451\u043d\u044b\u043c\u0438, \u0441\u043e\u043e\u0431\u0449\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e, \u043a\u0430\u043a\u043e\u0439 \u0432\u044b\u0437\u043e\u0432, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0432\u0438\u043d\u043e\u0432\u0430\u0442 \u0432 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445<\/li>\n<li>\u041c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0433\u043e \u043d\u0430 <code>std::stable_sort<\/code>\n<ul>\n<li>\u041f\u0440\u0438\u043d\u044f\u0442\u044c \u043f\u0430\u0442\u0447 \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0449\u0435, \u0447\u0435\u043c \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0438\u043b\u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0443<\/li>\n<\/ul>\n<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u043e, \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u0433 \u0438\u043b\u0438 \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043a\u043e\u0434 \u0432\u0440\u0443\u0447\u043d\u0443\u044e<\/li>\n<\/ul>\n<p>  \u042d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>std::stable_sort<\/code>, \u043e\u0441\u043e\u0437\u043d\u0430\u0432\u0430\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u044d\u0442\u0438\u043c \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0430 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0447\u0442\u043e-\u0442\u043e \u043d\u0435 \u0442\u0430\u043a, \u0438 \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043b\u0438 \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<h1>\u0413\u043b\u0430\u0432\u0430 3. \u041a\u0430\u043a\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u043c\u044b \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u043c?<\/h1>\n<p>  \u0412 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0441\u043c\u044b\u0441\u043b\u0435, \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u043c\u0430\u043b\u043e\u0432\u0430\u0436\u043d\u043e\u0435 \u0438 \u044d\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u0430\u043a\u043e\u0433\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0438 \u0443\u0441\u0438\u043b\u0438\u0439 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043b\u044e\u0434\u0435\u0439. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0440\u0435\u0448\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439, \u0442\u043e \u043b\u0435\u0433\u0447\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c\u0441\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0434\u043e\u0432\u043e\u043b\u044c\u0441\u0442\u0432\u0438\u0435 \u043e\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0438 (\u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430\u043c\u0438 \u0443\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u044b\u0445 \u0431\u0430\u0433\u043e\u0432). \u041e\u0434\u043d\u0430\u043a\u043e \u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u043d\u0430\u0448\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0431\u044b\u043b\u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0431 \u044d\u0442\u043e\u043c.<\/p>\n<p>  \u0422\u0430\u043a\u0436\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u0438\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0441\u043f\u043e\u0440\u044b \u043e \u0441\u0430\u043c\u043e\u0439 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0443\u0442\u0438\u0445\u043d\u0443\u0442 \u0438 \u0442\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u0442 \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u044c\u0441\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0448 \u0432\u044b\u0431\u043e\u0440 \u0441\u0430\u043c\u044b\u0439 \u043b\u0443\u0447\u0448\u0438\u0439, \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0443\u0441-\u043a\u0432\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0438\u0445 \u0438\u0434\u0435\u0439.<\/p>\n<h2>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 \u043e \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u0438\u0438<\/h2>\n<p>  \u041c\u044b \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u0438, \u0447\u0442\u043e \u0432\u0430\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u0441\u043b\u0443\u0447\u0430\u044f, \u043e\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 integer, \u0433\u0434\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u0430\u043b\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b, \u0434\u043e \u0447\u0440\u0435\u0437\u0432\u044b\u0447\u0430\u0439\u043d\u043e \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a, \u0433\u0434\u0435 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438\u043b\u0438 \u0434\u0430\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u043a\u043e\u043c\u043f\u0440\u0435\u0441\u0441\u0438\u044f \u043a\u043e\u0434\u0435\u043a\u0430\u043c\u0438. \u0418 \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u043e \u0432\u044b\u044f\u0432\u0438\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b.<\/p>\n<h2>\u041e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043c\u0430\u043b\u043e\u0437\u0430\u0442\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439<\/h2>\n<p>  <\/p>\n<pre><code class=\"cpp\">\/\/ *__m - \u044d\u0442\u043e median. partition [__first, __m) &lt; *__m \u0438 \/\/ *__m &lt;= [__m, __last) \/\/ \/\/ \u041e\u0441\u043e\u0431\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0447\u0442\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0446\u0435\u043b\u0435\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 while (true) {   while (__comp(*++__i, *__m));   while (!__comp(*\u2013__j, *__m));   if (__i > __j) break;   swap(*__i, *__j); } swap(*__i, *__m);<\/code><\/pre>\n<p>  \u0412 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u0412\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b \u0432\u044b\u0448\u0435, \u043e\u0442 \u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u0442, \u043d\u0443\u0436\u043d\u043e \u043b\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0446\u0438\u043a\u043b. \u042d\u0442\u0438 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043b\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u044b\u0431\u0440\u0430\u043d \u0440\u043e\u0432\u043d\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445). \u041e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0441\u0431\u0440\u043e\u0441\u0443 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u044e\u0442\u0441\u044f \u0432\u0440\u0435\u0434\u044f\u0449\u0438\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0438 \u0442\u0449\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0437\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0432\u043e\u043f\u0440\u043e\u0441<sup><a href=\"#footnotes\">28, 29<\/a><\/sup>. \u0418\u043d\u043e\u0433\u0434\u0430 \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0446\u0438\u043a\u043b\u043e\u0432.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-20-092440_996x536_scrot.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-20-092440_996x536_scrot.png\"\/><\/div>\n<p>  <i>\u041a\u0430\u043a \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 Quicksort<sup><a href=\"#footnotes\">29<\/a><\/sup><\/i><\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 \u044d\u0442\u0438\u043c, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u0445\u043d\u0438\u043a\u0443, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0432 BlockQuickSort<a href=\"#footnotes\"><sup>28<\/sup><\/a>.<\/p>\n<p>  BlockQuickSort \u0441\u0442\u0440\u0435\u043c\u0438\u0442\u0441\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0434\u0432\u0443\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 B, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0431\u0440\u0430\u0442\u044c B=64 \u0438 \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e 64-\u0431\u0438\u0442\u043d\u044b\u0435 integer), \u043e\u0434\u0438\u043d \u0434\u043b\u044f \u043b\u0435\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u044b, \u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0434\u043b\u044f \u043f\u0440\u0430\u0432\u043e\u0439 \u043f\u0440\u0438 \u043e\u0431\u0445\u043e\u0434\u0435 \u0431\u043b\u043e\u043a\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 B. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d\u043d\u043e\u0439 \u0432\u044b\u0448\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043e\u043d \u043d\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0438 \u0435\u0441\u043b\u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0441\u0451 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u0439 SIMD-\u043a\u043e\u0434 \u0441 16-\u0431\u0430\u0439\u0442\u043d\u044b\u043c\u0438 \u0438\u043b\u0438 32-\u0431\u0430\u0439\u0442\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 <code>pcmpgt\/pand\/por<\/code> \u0434\u043b\u044f \u043a\u043e\u0434\u0430 SSE4.2 \u0438 AVX2.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-20-093757_1418x880_scrot.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-20-093757_1418x880_scrot.png\"\/><\/div>\n<p>  <i><a href=\"https:\/\/godbolt.org\/z\/nrhT88MsM\" rel=\"nofollow noopener noreferrer\">https:\/\/godbolt.org\/z\/nrhT88MsM<\/a><\/i><\/p>\n<p>  \u0422\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u0438 \u043a ARM.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-20-094544_1297x750_scrot.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/2022-04-20-094544_1297x750_scrot.png\"\/><\/div>\n<p>  <i><a href=\"https:\/\/godbolt.org\/z\/W6sjrMnWf\" rel=\"nofollow noopener noreferrer\">https:\/\/godbolt.org\/z\/W6sjrMnWf<\/a><\/i><\/p>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043c\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e, \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0438\u043d\u0434\u0435\u043a\u0441\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u043e \u043e\u0431\u043c\u0435\u043d\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438. \u0422\u0430\u043a \u043a\u0430\u043a \u0431\u0443\u0444\u0435\u0440\u044b \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0445, \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>ctz<\/code> (count trailing zeros, \u0432 x86 <code>bsf<\/code> (Bit Scan Forward) \u0438\u043b\u0438 <code>tzcnt<\/code> (\u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 BMI)), <code>blsr<\/code> (Reset Lowest Set Bit, \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432 BMI) \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u0432 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0432\u0441\u0435\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-19.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-19.png\"\/><\/div>\n<p>  <i><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/godbolt.org\/z\/YPTWT4exz\">https:\/\/godbolt.org\/z\/YPTWT4exz<\/a>. \u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0443 aarch64 \u043d\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0430 blsr<\/i><\/p>\n<p>  \u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u043f\u0440\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a integer \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044e \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 50%. \u041c\u043e\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u0438\u0445 \u0432 <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/reviews.llvm.org\/D122780\">https:\/\/reviews.llvm.org\/D122780<\/a>.<\/p>\n<h2>\u0422\u044f\u0436\u0451\u043b\u044b\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f<\/h2>\n<p>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0443\u0441\u0442\u0440\u0430\u043d\u0438\u043b\u0438 \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u043e \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f, \u0442\u0435\u043f\u0435\u0440\u044c \u043b\u043e\u0433\u0438\u0447\u043d\u0435\u0435 \u0432\u0437\u044f\u0442\u044c \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u0432\u0440\u0438\u0441\u0442\u0438\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u0431\u043e\u0440 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<pre><code class=\"cpp\">\/\/ \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u0435\u0445\u043d\u0438\u043a\u0443 ninther \u0422\u0430\u043a\u0438 \u0438\u043b\u0438 \u043c\u0435\u0434\u0438\u0430\u043d\u0443 3 \u0434\u043b\u044f \u0432\u044b\u0431\u043e\u0440\u0430 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430. \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u0438\u0437 3 \u043c\u0435\u0434\u0438\u0430\u043d 9 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \/\/ (first, first + half, last \u2013 1) \/\/ (first + 1, first + half \u2013 1, last \u2013 2) \/\/ (first + 2, first + half + 1, last \u2013 3) _VSTD::__sort3&lt;_Compare>(__first,                          __first + __half_len,                          __last \u2013 difference_type(1),                          __comp); _VSTD::__sort3&lt;_Compare>(__first + difference_type(1),                          __first + (__half_len \u2013 1),                          __last \u2013 difference_type(2),                          __comp); _VSTD::__sort3&lt;_Compare>(__first + difference_type(2),                          __first + (__half_len + 1),                          __last \u2013 difference_type(3),                          __comp); _VSTD::__sort3&lt;_Compare>(__first + (__half_len \u2013 1),                          __first + __half_len,                          __first + (__half_len + 1),                          __comp); _VSTD::iter_swap(__first, __first + __half_len);<\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439, \u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u043d\u0438\u0439 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043c\u044b \u0440\u0435\u0448\u0438\u043c \u0432\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443, \u0442\u043e \u0441\u043c\u043e\u0436\u0435\u043c \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0438 \u0441 \u043f\u0435\u0440\u0432\u043e\u0439. \u0427\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0440\u043e\u043b\u044c \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445, \u0442\u0435\u043c \u043c\u0435\u043d\u044c\u0448\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0446\u0435.<\/p>\n<p>  \u041f\u0440\u043e\u0447\u0438\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0432 \u0441\u0435\u0431\u044f \u043d\u0435\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u0434\u043b\u044f \u043d\u0435 \u0441\u0430\u043c\u044b\u0445 \u043b\u0435\u0432\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 (\u0438\u0437 \u0432\u0441\u0435\u0445 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0443\u0440\u043e\u0432\u043d\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u0435\u0441\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u0441\u0430\u043c\u044b\u0439 \u043b\u0435\u0432\u044b\u0439). \u0412\u0441\u0435 \u043e\u043d\u0438 \u0434\u0430\u044e\u0442 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435, \u043d\u043e \u043d\u0430\u0434\u0451\u0436\u043d\u044b\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430.<\/p>\n<p>  \u0412\u0441\u0451 \u044d\u0442\u043e \u0441\u043e\u0433\u043b\u0430\u0441\u0443\u0435\u0442\u0441\u044f \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 <em>pdqsort<\/em><sup><a href=\"https:\/\/danlarkorg.wordpress.com\/wp-admin\/post.php?post=758&amp;amp;action=edit#footnotes\" rel=\"nofollow noopener noreferrer\">3<\/a><\/sup>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \u0418 \u043c\u044b \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0435\u043c \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 20-30% \u0434\u043b\u044f \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435 \u0436\u0435\u0440\u0442\u0432\u0443\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u0438 \u043f\u043e\u0447\u0442\u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432.<\/p>\n<h2>\u041e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a<\/h2>\n<p>  \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0441\u043b\u043e \u0438\u043d\u043d\u043e\u0432\u0430\u0446\u0438\u0438 \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 <code>cmov<\/code> (\u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f). \u042d\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/reviews.llvm.org\/D118029\">https:\/\/reviews.llvm.org\/D118029<\/a>. \u0427\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e?<\/p>\n<p>  \u0418\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u00ab\u0418\u0441\u0442\u043e\u0440\u0438\u044f LLVM \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f\u00bb \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 sort4 \u0438 sort5. \u0412 \u043d\u0438\u0445 \u0435\u0441\u0442\u044c \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432: <em>\u0441\u0435\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438<\/em>. \u042d\u0442\u043e \u0441\u0435\u0442\u0438, \u0430\u0431\u0441\u0442\u0440\u0430\u0433\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430, \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u0437 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u00ab\u043b\u0438\u043d\u0438\u0439\u00bb, \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0449\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0438 \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u043e\u0432, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0445 \u043f\u0430\u0440\u044b \u043b\u0438\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043c\u0435\u043d\u0438\u0432\u0430\u044e\u0442 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043b\u0438\u043d\u0438\u044f\u0445, \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0435 \u0432 \u043d\u0443\u0436\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u2014 \u044d\u0442\u043e \u0441\u0435\u0442\u0438, \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 <em>\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0431\u043c\u0435\u043d\u0430 \u043c\u0435\u0441\u0442\u0430\u043c\u0438<\/em> (<em>compare-and-swap<\/em>). \u0414\u043b\u044f \u0442\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e \u0442\u0440\u0438 \u0440\u0430\u0437\u0430, \u0434\u043b\u044f \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u2014 \u043f\u044f\u0442\u044c \u0440\u0430\u0437, \u0430 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u0435\u0442\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u043f\u044f\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0435\u0432\u044f\u0442\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 <em>compare-and-swap<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/sorting_networks.drawio-3.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/sorting_networks.drawio-3.png\"\/><\/div>\n<p>  \u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0435\u0442\u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u043f\u043e\u0434 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u043c, \u043d\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043e\u043f\u0440\u043e\u0432\u0435\u0440\u0433\u043d\u0443\u0442\u044c \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0443 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0435\u0442\u0435\u0439 \u0434\u043b\u044f 11 \u0438 12 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 \u043f\u043e\u0442\u0440\u044f\u0441\u0430\u044e\u0449\u0435\u043c \u043f\u043e\u0441\u0442\u0435 <em>Proving 50-Year-Old Sorting Networks Optimal<\/em><sup><a href=\"#footnotes\">30<\/a><\/sup> \u0414\u0436\u0435\u043d\u043d\u0438\u0441 \u0425\u0430\u0440\u0434\u0435\u0440.<\/p>\n<p>  \u0412 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u043c \u043a\u043e\u0434\u0435 x86 \u0438 ARM \u0435\u0441\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b <code>cmov reg1, reg2<\/code> \u0438 <code>csel reg1, reg2, flag<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u044e\u0442 \u0438\u043b\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439. \u0418\u0445 \u043c\u043e\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 <em>compare-and-swap<\/em>.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-22.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-22.png\"\/><\/div>\n<p>  <i><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/gcc.godbolt.org\/z\/eG1EnqdTa\">https:\/\/gcc.godbolt.org\/z\/eG1EnqdTa<\/a><\/i><\/p>\n<p>  \u0410 \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043c\u0435\u0441\u0442\u0430\u043c\u0438 $inline$N$inline$ \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u0440\u0438 \u043f\u043e\u043c\u043e\u0449\u0438 $inline$M$inline$ \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u043d\u0443\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ul>\n<li>$inline$N$inline$ \u0437\u0430\u0433\u0440\u0443\u0437\u043e\u043a \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0435\u0439, $inline$N$inline$ \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u0438<\/li>\n<li>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f <code>cmp<\/code> \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c <code>mov<\/code> \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u0438 \u0434\u0432\u0430 <code>cmov<\/code> \u0434\u043b\u044f \u043e\u0431\u043c\u0435\u043d\u0430 \u043c\u0435\u0441\u0442\u0430\u043c\u0438. \u0412\u0441\u0435\u0433\u043e $inline$4M$inline$ \u043a\u043e\u043c\u0430\u043d\u0434.<\/li>\n<\/ul>\n<p>  \u0418\u0442\u043e\u0433\u043e \u043c\u044b \u0438\u043c\u0435\u0435\u043c:<\/p>\n<ul>\n<li>Sort2 \u2014 8 \u043a\u043e\u043c\u0430\u043d\u0434 (2 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 1 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435)<\/li>\n<li>Sort3 \u2014 18 \u043a\u043e\u043c\u0430\u043d\u0434 (3 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 3 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f)<\/li>\n<li>Sort4 \u2014 28 \u043a\u043e\u043c\u0430\u043d\u0434 (4 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0438 5 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439)<\/li>\n<li>Sort5 \u2014 46 \u043a\u043e\u043c\u0430\u043d\u0434 (5 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438 9 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439)<\/li>\n<\/ul>\n<p>  <\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-23.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-23.png\"\/><\/div>\n<p>  <i>\u0420\u043e\u0432\u043d\u043e 18 \u043a\u043e\u043c\u0430\u043d\u0434 \u0434\u043b\u044f sort3 \u0441 64-\u0431\u0438\u0442\u043d\u044b\u043c\u0438 integer, \u043f\u043e 1 \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u0438 \u0438 1 \u0434\u043b\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430<\/i><\/p>\n<p>  \u041e\u0434\u043d\u0430\u043a\u043e \u043a\u0430\u043a \u043c\u044b \u0432\u0438\u0434\u0438\u043c \u0438\u0437 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u044b\u0448\u0435 \u043e\u0431\u0437\u043e\u0440\u0430, sort3 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0430\u0447\u0435, \u0441 \u043e\u0434\u043d\u0438\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u043c \u043e\u0431\u043c\u0435\u043d\u043e\u043c \u0438 \u0441 <em>\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043e\u0431\u043c\u0435\u043d\u043e\u043c<\/em>.<\/p>\n<pre><code class=\"cpp\">\/\/ \u0413\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e *__x, *__y \u0438 *__z \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u0440\u0430\u0442\u043e\u0440\u0443 __c, \/\/ \u043f\u0440\u0438 \u0434\u043e\u043f\u0443\u0449\u0435\u043d\u0438\u0438, \u0447\u0442\u043e *__y \u0438 *__z \u0443\u0436\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. template &lt;class _Compare, class _RandomAccessIterator> inline void __partially_sorted_swap(_RandomAccessIterator __x, _RandomAccessIterator __y,                                     _RandomAccessIterator __z, _Compare __c) {   using value_type = typename iterator_traits&lt;_RandomAccessIterator>::value_type;   bool __r = __c(*__z, *__x);   value_type __tmp = __r ? *__z : *__x;   *__z = __r ? *__x : *__z;   __r = __c(__tmp, *__y);   *__x = __r ? *__x : *__y; }  template &lt;class _Compare, class _RandomAccessIterator> inline void __sort3(_RandomAccessIterator __x1, _RandomAccessIterator __x2,                     _RandomAccessIterator __x3, _Compare __c) {   _VSTD::__cond_swap&lt;_Compare>(__x2, __x3, __c);   _VSTD::__partially_sorted_swap&lt;_Compare>(__x1, __x2, __x3, __c); }<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u044d\u0442\u043e \u0432 Godbolt, \u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u0430 \u043e\u0434\u043d\u0443 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u043c\u0435\u043d\u044c\u0448\u0435. 19-\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043b\u0435\u0432\u0430 \u0441\u0442\u0430\u043b\u0430 16-\u043e\u0439 \u0441\u043f\u0440\u0430\u0432\u0430, \u0430 15-\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441\u043b\u0435\u0432\u0430 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0438\u0441\u0447\u0435\u0437\u043b\u0430.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-24.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-24.png\"\/><\/div>\n<p>  <i><a href=\"https:\/\/gcc.godbolt.org\/z\/59TMfhs6v\" rel=\"nofollow noopener noreferrer\">https:\/\/gcc.godbolt.org\/z\/59TMfhs6v<\/a><\/i><\/p>\n<p>  \u0414\u0443\u043c\u0430\u044e, \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u0433\u043e\u0432\u043e\u0440\u044f\u0442 \u0430\u0432\u0442\u043e\u0440\u044b \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c \u0432 \u043f\u0430\u0442\u0447\u0435. \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u043d\u0430\u0439\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c, \u0432\u044b\u044f\u0441\u043d\u0438\u0432, \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0432 \u0442\u0440\u043e\u0439\u043a\u0435 (X, Y, Z) \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 (Y &lt;= Z) \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b, \u0437\u0430\u0434\u0430\u0447\u0443 \u043b\u0443\u0447\u0448\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0437\u0430 7 \u043a\u043e\u043c\u0430\u043d\u0434, \u0447\u0435\u043c \u0437\u0430 8.<\/p>\n<ol>\n<li>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c Z \u0432 tmp.<\/li>\n<li>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c X \u0438 Z.<\/li>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 X \u0432 Z.<\/li>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 X \u0432 tmp<\/li>\n<li><s>\u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u043c tmp \u0432 X.<\/s> \u2014 <strong>\u044d\u0442\u043e\u0442 \u044d\u0442\u0430\u043f \u0443\u0441\u0442\u0440\u0430\u043d\u0451\u043d<\/strong><\/li>\n<li>\u0421\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c tmp \u0438 Y.<\/li>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 Y \u0432 X.<\/li>\n<li>\u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 tmp \u0432 Y.<\/li>\n<\/ol>\n<p>  \u0414\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 integer \u043d\u0435\u0442 \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u0438 \u0441 \u0442\u0430\u043a\u043e\u0439 \u043f\u0430\u0440\u043e\u0439 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439, \u043d\u043e \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u044f\u0442\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e \u0442\u0440\u0451\u0445 \u043f\u0430\u0440. \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u0430\u0442\u0447 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0443\u0437\u043d\u0430\u0442\u044c, \u043a\u0430\u043a \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c 1 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u043a\u0440\u0430\u0441\u043d\u043e\u043c \u043a\u0440\u0443\u0436\u043a\u0435 \u043d\u0438\u0436\u0435. \u042d\u0442\u043e \u0442\u0435 \u043f\u0430\u0440\u044b \u043b\u0438\u043d\u0438\u0439, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 2 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0443\u0436\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/sorting_networks.drawio-4.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/sorting_networks.drawio-4.png\"\/><\/div>\n<p>  \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b\u043e \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u0430\u043d\u0434 \u0432 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 <strong>18->17<\/strong> \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0442\u0440\u0451\u0445 integer \u0438 <strong>46->43<\/strong> \u043f\u0440\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u043f\u044f\u0442\u0438 integer. \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u0447\u0442\u043e\u0431\u044b \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043c\u0430\u043d\u0434, \u043d\u0430\u043c \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0435\u0442\u0438 \u0441 \u043d\u0430\u0438\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0431\u043c\u0435\u043d\u043e\u0432.<\/p>\n<p>  \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0438 \u043e\u043d\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435? \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 <strong>18->17<\/strong> \u044d\u0442\u043e \u043d\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0442\u0430\u043a, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0443\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 <code>mov<\/code> \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432 \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440. \u0424\u0440\u043e\u043d\u0442\u0435\u043d\u0434\u0443 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u043d\u043e, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e, \u0432 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043c\u0435\u0442\u043d\u043e. \u0414\u043b\u044f <strong>46->43<\/strong> \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0442\u0430\u043a\u0430\u044f \u0436\u0435.<\/p>\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-25.png\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image-25.png\"\/><\/div>\n<p>  <i>Sort3 \u0441 18 \u0438 \u0441 17 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438: <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/gcc.godbolt.org\/z\/eaoKscqY4\">https:\/\/quick-bench.com\/q\/0THJhOe5q2-vQsEy4v5DrAFGzBc<\/a>. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e Sort5 \u0441 46 \u0438 43 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 \u0441\u043c. \u0432 <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/quick-bench.com\/q\/NXRFUJdHUoG6KMFSQ9B3fiVSKZ4\">https:\/\/quick-bench.com\/q\/NXRFUJdHUoG6KMFSQ9B3fiVSKZ4<\/a><\/i><\/p>\n<p>  \u0412 \u0440\u0435\u0432\u044c\u044e LLVM \u043e\u0442\u043c\u0435\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 2-3% \u0434\u043b\u044f \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432 \u0441 integer, \u043d\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0441\u0432\u044f\u0437\u0430\u043d\u0430 \u0441 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u043c \u043e\u0442 \u0432\u0435\u0440\u0441\u0438\u0438 \u0441 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u043a \u0432\u0435\u0440\u0441\u0438\u0438 \u0431\u0435\u0437 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f. \u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 \u043e\u0441\u043e\u0431\u043e \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043d\u043e \u044d\u0442\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0438\u043c\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0432 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u0430\u0445, \u043a\u0430\u043a \u0441\u0435\u0442\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u042f \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0432\u0441\u0435\u043c \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044f\u043c C++ \u0438\u0437\u0443\u0447\u0438\u0442\u044c \u043f\u0430\u0442\u0447, \u0432 \u043d\u0451\u043c \u0435\u0441\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0438\u0434\u0435\u0439 \u0438 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c<a href=\"#footnotes\"><sup>31<\/sup><\/a>.<\/p>\n<h1>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h1>\n<p>  <\/p>\n<h2>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u043e\u0447\u044c?<\/h2>\n<p>  \u041f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0449\u0451 \u043c\u043d\u043e\u0433\u043e\u0435. \u0412\u043e\u0442 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0442\u043e\u0433\u043e, \u0441 \u0447\u0435\u043c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u043c\u043e\u0447\u044c:<\/p>\n<ul>\n<li>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u0443\u044e \u0432\u044b\u0448\u0435 \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0445 \u0440\u0435\u0436\u0438\u043c\u0430\u0445\n<ul>\n<li>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0434\u043b\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 GNU library, Microsoft STL, \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 Rust, D, \u0438 \u0442. \u043f.<\/li>\n<\/ul>\n<\/li>\n<li>\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u0433\u043e\u0433\u043e \u0441\u043b\u0430\u0431\u043e\u0433\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u0432\u043e \u0432\u0441\u0435\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442.\n<ul>\n<li><code>std::sort, std::partial_sort, std::nth_element, std::min_element, std::max_element, std::stable_sort<\/code> \u0438 \u0432 \u0434\u0440\u0443\u0433\u0438\u0445, \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445. \u0412\u043e \u0432\u0441\u0435\u0445 \u044f\u0437\u044b\u043a\u0430\u0445 \u043d\u0430\u043f\u043e\u0434\u043e\u0431\u0438\u0435 Rust, Java, Python, D, \u0438 \u0442. \u0434. \u041a\u0430\u043a \u043c\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u0438, \u043f\u043e\u0445\u043e\u0436\u0435, \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 20 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0430 \u0432\u044b\u0437\u043e\u0432. \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u044d\u043c\u043f\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435.<\/li>\n<\/ul>\n<\/li>\n<li>\u0412 \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 C++ \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u0442\u043b\u0430\u0434\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0449\u0438\u0439 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0443\u0440\u043e\u0432\u0435\u043d\u044c <code>_LIBCPP_DEBUG<\/code><sup><a href=\"#footnotes\">27<\/a><\/sup>.<\/li>\n<li>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0442\u0435\u0445 API, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\/\u043e\u0442\u043b\u0430\u0434\u043a\u0438. \u041f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c seed \u0445\u044d\u0448-\u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0445\u044d\u0448-\u0442\u0430\u0431\u043b\u0438\u0446. \u0415\u0441\u043b\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0439, \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435, \u0438 \u0442. \u0434.<\/li>\n<li>\u0418\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u0438\u0445\u0443\u0434\u0448\u0438\u0439 \u0441\u043b\u0443\u0447\u0430\u0439 <code>std::nth_element<\/code> \u0432\u043e \u0432\u0441\u0435\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a.<\/li>\n<li>\u0415\u0449\u0451 \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a. \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u0442\u0443\u0442 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0439!<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043c\u044b\u0441\u043b\u0438<\/h2>\n<p>  \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0447\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0431\u043e\u043b\u0435\u0435 \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434 (\u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043d\u0430\u0434 \u043d\u0438\u043c \u043d\u0435 \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0430\u0431\u043e\u0447\u0438\u0439 \u0434\u0435\u043d\u044c), \u043f\u0435\u0440\u0432\u043e\u0439 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0435\u043b\u044c\u044e \u0431\u044b\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439. \u041c\u044b \u0432\u044b\u044f\u0432\u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0442\u0435\u043d \u0431\u0430\u0433\u043e\u0432 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445). \u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0431\u0430\u0433\u043e\u0432 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0440\u0430\u0437\u0443 \u0436\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0431\u0435\u0437 \u043f\u043e\u043c\u0435\u0445 \u0432 \u0432\u0438\u0434\u0435 \u043f\u043e\u043b\u043e\u043c\u0430\u043d\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0432\u0430\u0448\u0430 \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u0432\u0435\u043b\u0438\u043a\u0430, \u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0444\u043b\u0430\u0433 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0437 libcxx \u0438 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435\u0441\u044c \u043a \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438. \u0421\u0430\u043c\u043e\u0435 \u0432\u0430\u0436\u043d\u043e\u0435 \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0431\u044b\u043b\u043e \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043e\u043f\u044b\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0445 \u0432\u0435\u0449\u0435\u0439 \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0435 \u0438 \u043d\u0430\u0443\u0447\u0438\u043b\u0438\u0441\u044c \u0431\u043e\u0440\u043e\u0442\u044c\u0441\u044f \u0441 \u0437\u0430\u043a\u043e\u043d\u043e\u043c \u0425\u0430\u0439\u0440\u0430\u043c\u0430. \u042f \u0440\u0430\u0434, \u0447\u0442\u043e \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043d\u0451\u043c \u0438 \u043f\u043e\u043c\u043e\u0433\u0430\u043b \u043a\u043e\u043c\u0430\u043d\u0434\u0435 open source \u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u043d\u0451\u043c.<\/p>\n<h3>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>  \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e \u041d\u0438\u043b\u0430\u044f \u0412\u0430\u0438\u0448\u0430, \u0437\u0430\u043f\u0443\u0448\u0438\u0432\u0448\u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 LLVM, \u043c\u0435\u0439\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430 libcxx \u041b\u0443\u0438\u0441\u0430 \u0414\u0438\u043e\u043d\u043d\u0435 \u0437\u0430 \u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u043e\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0448\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e Morwenn \u0437\u0430 \u0432\u044b\u0434\u0430\u044e\u0449\u0443\u044e\u0441\u044f \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043c\u0435\u043d\u044f \u043c\u043d\u043e\u0433\u043e\u043c\u0443 \u043d\u0430\u0443\u0447\u0438\u043b\u0430<sup><a href=\"#footnotes\">5<\/a><\/sup>. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u041e\u0440\u0441\u043e\u043d\u0443 \u041f\u0438\u0442\u0435\u0440\u0441\u0443 \u0438 pdqsort, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<p>  <a name=\"footnotes\"><\/a><\/p>\n<ol>\n<li>\u0412 \u0437\u043d\u0430\u043c\u0435\u043d\u0438\u0442\u043e\u043c \u0443\u0447\u0435\u0431\u043d\u0438\u043a\u0435 \u041a\u043e\u0440\u043c\u0435\u043d\u0430 \u0438 \u0441\u043e\u0430\u0432\u0442\u043e\u0440\u043e\u0432 <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/mitpress.mit.edu\/books\/introduction-algorithms-fourth-edition\">Introduction to Algorithms<\/a> \u0431\u043e\u043b\u0435\u0435 \u043f\u044f\u0442\u0438\u0434\u0435\u0441\u044f\u0442\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/li>\n<li>Ani Kristo, Kapil Vaidya, Ugur \u00c7etintemel, Sanchit Misra, and Tim Kraska. 2020. <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/doi.org\/10.1145\/3318464.3389752\">The Case for a Learned Sorting Algorithm<\/a>. SIGMOD \u201920.<\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/news.ycombinator.com\/item?id=14666710\">Hackernews: \u201cI think it\u2019s fair to say that pdqsort (pattern-defeating quicksort) is overall the best\u201d<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/arxiv.org\/abs\/1705.02257\">In-place Parallel Super Scalar Samplesort (IPS4o)<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/github.com\/Morwenn\/cpp-sort\">https:\/\/github.com\/Morwenn\/cpp-sort<\/a> \u2014 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0441\u0430\u043c\u044b\u0445 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 C++<\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/llvm.org\/devmtg\/2010-11\/Hinnant-libcxx.pdf\">libc++: A Standard Library for C++0x<\/a>, Howard Hinnant, 2010 LLVM Developers\u2019 Meeting<\/li>\n<li>\u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/github.com\/protocolbuffers\/protobuf\/blob\/61dcf50b85b7e2060e03bb99f88540d81eedb125\/src\/google\/protobuf\/generated_message_reflection.cc#L1548\">ListFieldsMayFailOnStripped<\/a> Google<\/li>\n<li>H. Mannila, \u201cMeasures of Presortedness and Optimal Sorting Algorithms,\u201d in IEEE Transactions on Computers, vol. C-34, no. 4, pp. 318-325, April 1985, doi: 10.1109\/TC.1985.5009382.<\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/C%2B%2B_Standard_Library\">C++ Standard Library<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/github.com\/lijiansong\/stl-impl\/blob\/master\/stl-impl\/stl\/ALGO.H\">Original std::sort implementation by Stepanov and Lee<\/a><\/li>\n<li>Antiquicksort: <a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/www.cs.dartmouth.edu\/~doug\/aqsort.c\">https:\/\/www.cs.dartmouth.edu\/~doug\/aqsort.c<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Quickselect\">Quickselect<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/github.com\/gcc-mirror\/gcc\/blob\/16e2427f50c208dfe07d07f18009969502c25dc8\/libstdc%2B%2B-v3\/include\/bits\/stl_algo.h#L1972\">nth_element worst case fallback in GNU libstdc++<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/arxiv.org\/abs\/1606.00484\">Fast Deterministic Selection by Andrei Alexandrescu<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Introsort\">Introsort<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Median_of_medians\">Median of medians<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/reviews.llvm.org\/D36423\">[libc++] Introsort based sorting function (2017, unsubmitted)<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/www.reddit.com\/r\/cpp\/comments\/2fa7i1\/libc_has_quadratic_stdsort\/\">libc++ has quadratic std::sort (reddit discussion)<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/reviews.llvm.org\/D113413\">Add introsort to avoid O(n^2) behavior and a benchmark for adversarial quick sort input (submitted).<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/reviews.llvm.org\/D96946\">[libcxx][RFC] Unspecified behavior randomization in libcxx<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/en.wikipedia.org\/wiki\/Address_space_layout_randomization\">ASLR (address space layout randomization)<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/github.com\/ClickHouse\/ClickHouse\/pull\/34393\/files\">Sort added equal items ranges randomization (ClickHouse)<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/github.com\/ClickHouse\/ClickHouse\/pull\/34175\/files\">bitsetsort peformance check (ClickHouse)<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/rosettacode.org\/wiki\/Sort_stability\">Sort stability defaults in different programming languages<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/docs.google.com\/presentation\/d\/1cujdIkbwnbjd753rZH_qH7kmCGjR6rpoHIZEBkxdw9I\/edit?usp=sharing\">All found open source issues (slides with repo names, commits and files)<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/en.cppreference.com\/w\/cpp\/language\/inline\">Inline variables in C++<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/libcxx.llvm.org\/DesignDocs\/DebugMode.html\">Debug mode in libcxx<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/doi.org\/10.1145\/3274660\">Stefan Edelkamp and Armin Wei\u00df. 2019. BlockQuicksort: Avoiding Branch Mispredictions in Quicksort. <\/a>ACM J. Exp. Algorithmics 24, Article 1.4 (2019), 22 pages. DOI.<\/li>\n<li>Kaligosi, K., &amp; Sanders, P. (2006). How Branch Mispredictions Affect Quicksort. Algorithms \u2013 ESA 2006, 780\u2013791. doi:10.1007\/11841036_69<\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/jix.one\/proving-50-year-old-sorting-networks-optimal-part-1\/\">Proving 50-Year-Old Sorting Networks Optimal<\/a><\/li>\n<li><a rel=\"nofollow noopener noreferrer\" href=\"https:\/\/reviews.llvm.org\/D118029\">Introduce branchless sorting functions for sort3, sort4 and sort5 (LLVM review)<\/a><\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/662181\/\"> https:\/\/habr.com\/ru\/post\/662181\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image.png\" alt=\"image\" data-src=\"https:\/\/danlarkorg.files.wordpress.com\/2022\/04\/image.png\"\/><\/div>\n<p>  \u041c\u044b <a href=\"https:\/\/reviews.llvm.org\/D122780\" rel=\"nofollow noopener noreferrer\">\u043c\u0435\u043d\u044f\u0435\u043c<\/a> <code>std::sort<\/code> \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 libcxx \u043f\u0440\u043e\u0435\u043a\u0442\u0430 LLVM. \u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u043c\u044b \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u043c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u0438 \u043a\u0430\u043a\u0438\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f, \u043e \u0431\u0430\u0433\u0430\u0445, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0438\u0437 open source. \u041c\u044b \u043f\u043e\u043a\u0430\u0436\u0435\u043c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u043e\u0432, \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0438 \u0447\u0435\u0433\u043e \u044d\u0442\u043e \u043d\u0430\u043c \u0441\u0442\u043e\u0438\u043b\u043e, \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0437\u0430\u043a\u043e\u043d\u0430 \u0425\u0430\u0439\u0440\u0430\u043c\u0430 \u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0441 \u043f\u043e\u0434\u043a\u0440\u0435\u043f\u043b\u0435\u043d\u0438\u0435\u043c. \u0412\u0441\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u043b\u043e\u0436\u0435\u043d\u044b \u0432 open source, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e \u043c\u043e\u0433\u0443 \u043e \u043d\u0438\u0445 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c.<\/p>\n<p>  \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0430 \u043d\u0430 \u0442\u0440\u0438 \u0447\u0430\u0441\u0442\u0438. \u041f\u0435\u0440\u0432\u0430\u044f \u2014 \u044d\u0442\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u0433\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u0445 C++. \u0412\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0435\u0442 \u043e\u0431 \u0443\u0441\u0438\u043b\u0438\u044f\u0445, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u0431\u0430\u0433\u0430\u043c\u0438. \u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u0439 \u043c\u044b \u043e\u0431\u044a\u044f\u0441\u043d\u0438\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0443\u044e \u043d\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0432\u0441\u0435 \u0432\u043d\u0435\u0441\u0451\u043d\u043d\u044b\u0435 \u043d\u0430\u043c\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-332369","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/332369","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=332369"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/332369\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=332369"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=332369"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=332369"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}