{"id":188012,"date":"2013-07-29T00:01:03","date_gmt":"2013-07-28T20:01:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=188012"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=188012","title":{"rendered":"<span class=\"post_title\">\u0421\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 .NET<\/span>"},"content":{"rendered":"<div class=\"content html_format\">   \t\u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u0435 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 .NET. \u042f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0432 .NET, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0435\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 Java. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 .NET \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \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 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443:<br \/>  <a name=\"habracut\"><\/a><br \/>  <b>\u0414\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430:<\/b>  <\/p>\n<ol>\n<li> \u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 (\u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435) \u0438\u0437 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f;<\/li>\n<li> \u041f\u0440\u043e\u0441\u0442 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438;<\/li>\n<li> \u0422\u0440\u0435\u0431\u0443\u0435\u0442 \u043b\u0438\u0448\u044c O(logn) \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b (\u043d\u0435 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 O(n) \u043f\u0430\u043c\u044f\u0442\u0438); <\/li>\n<li> \u0425\u043e\u0440\u043e\u0448\u043e \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442\u0441\u044f \u0441 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u0430\u043c\u0438 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438.<\/li>\n<\/ol>\n<p>  <b>\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/b>  <\/p>\n<ol>\n<li>\u0421\u0438\u043b\u044c\u043d\u043e \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u0443\u0435\u0442 \u043f\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0434\u043e O(n<sup>2<\/sup>) \u043f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u0432\u044b\u0431\u043e\u0440\u0430\u0445 \u043e\u043f\u043e\u0440\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u0438 \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u044b\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c, \u0432\u044b\u0431\u0438\u0440\u0430\u044f \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e, \u0430 \u043d\u0435 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c; <\/li>\n<li> \u041d\u0430\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043e\u0448\u0438\u0431\u043a\u0435 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c O(n) \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432. \u0412 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u0435\u043d\u044c\u0448\u0435\u0439 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 O(logn);<\/li>\n<li> \u041d\u0435\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432 \u2014 \u0435\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u043a\u043b\u044e\u0447.<\/li>\n<\/ol>\n<p>  \u041d\u0430\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043c\u043e\u0436\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430\u0438\u0432\u043d\u044b\u0439 QuickSort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">public void QuickSort(int left, int right)  {   int l = left;   int r = right;   int avg = array[(l + r) \/ 2)];    do     {       while (array[l] &lt; avg)        ++l;       while (array[r] &gt; avg)        --r;       if (l &lt;= r)        {          if (l &lt; r)            {              int temp = array[l];              array[l] = array[r];              array[r] = temp;            }          ++l;          --r;         }      }     while (l &lt;= r);   if (left &lt; r)     QuickSort(left, r);   if (l &lt; right)     QuickSort(l, right); } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <b>\u0412\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438:<\/b>  <\/p>\n<ol>\n<li>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043f\u043e\u0440\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438 \u0434\u043b\u0438\u043d\u043d\u043e\u044e n \u2014 1 \u0438 1 \u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u0443\u0435\u0442 \u0434\u043e O(n<sup>2<\/sup>); <\/li>\n<li>\u041f\u0440\u0438 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445 \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 O(n), \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0447\u0435\u0433\u043e \u043f\u0440\u0438 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 n \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0442\u0438 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u043a\u0430; <\/li>\n<li>\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d \u043c\u0435\u043d\u044f\u0435\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u041d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0447\u0438\u0441\u0435\u043b \u044d\u0442\u043e \u043d\u0438 \u043a\u0430\u043a \u043d\u0435 \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043d\u043e \u0435\u0441\u043b\u0438 \u043c\u044b \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u043a\u0430\u043a\u043e\u043c\u0443-\u043b\u0438\u0431\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0443 \u0442\u043e \u044d\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 Sort \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c. <\/li>\n<\/ol>\n<p>  <b>\u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 .NET.<\/b><\/p>\n<h4>.NET 1.0<\/h4>\n<p>  \u0418\u0442\u0430\u043a, \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 .NET 1.0. \u0417\u0430\u0431\u0435\u0433\u0430\u044f, \u0432\u043f\u0435\u0440\u0435\u0434 \u0441\u043a\u0430\u0436\u0443, \u0447\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043c\u044b \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0443\u0432\u0438\u0434\u0438\u043c, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432\u2026 (\u0438\u0437-\u0437\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438)<\/p>\n<pre><code class=\"cs\">public static void Sort(Array array)  {    Array.Sort(array, (Array) null, array.GetLowerBound(0), array.Length, (IComparer) null);  } public static void Sort(Array keys, Array items, int index, int length, IComparer comparer)  {    if (length &gt; 1) {     if (comparer == Comparer.Default || comparer == null) {       if(TrySZSort(array, null, index, index + length - 1)) {         return;       }     }   object[] keys1 = keys as object[];   object[] items1 = (object[]) null;   if (keys1 != null)     items1 = items as object[];   if (keys1 != null && (items == null || items1 != null))     new Array.SorterObjectArray(keys1, items1, comparer).QuickSort(index, index + length - 1);   else     new Array.SorterGenericArray(keys, items, comparer).QuickSort(index, index + length - 1);  } <\/code><\/pre>\n<p>  \u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a\u043b\u0430\u0441\u0441\u044b SorterObjectArray \u0438 SorterGenericArray:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">SorterObjectArray<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">private class SorterObjectArray  {   private object[] keys;   private object[] items;   private IComparer comparer;    public SorterObjectArray(object[] keys, object[] items, IComparer comparer)    {     base..ctor();     if (comparer == null)       comparer = (IComparer) Comparer.Default;     this.keys = keys;     this.items = items;     this.comparer = comparer;    }    public virtual void QuickSort(int left, int right)    {     do      {       int left1 = left;       int right1 = right;       object obj1 = this.keys[left1 + right1 &gt;&gt; 1];        do         {          while (this.comparer.Compare(this.keys[left1], obj1) &lt; 0)           ++left1;          while (this.comparer.Compare(obj1, this.keys[right1]) &lt; 0)           --right1;         }              if (left1 &lt;= right1)        {         if (left1 &lt; right1)          {            object obj2 = this.keys[left1];            this.keys[left1] = this.keys[right1];            this.keys[right1] = obj2;            if (this.items != null)             {              object obj3 = this.items[left1];              this.items[left1] = this.items[right1];              this.items[right1] = obj3;             }           }           ++left1;           --right1;           }           else            break;         }           while (left1 &lt;= right1);           if (right1 - left &lt;= right - left1)           {             if (left &lt; right1)               this.QuickSort(left, right1);             left = left1;           }           else           {             if (left1 &lt; right)               this.QuickSort(left1, right);             right = right1;           }         }         while (left &lt; right);       }     }  <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">SorterGenericArray<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">private class SorterGenericArray     {       private Array keys;       private Array items;       private IComparer comparer;        public SorterGenericArray(Array keys, Array items, IComparer comparer)       {         base..ctor();         if (comparer == null)           comparer = (IComparer) Comparer.Default;         this.keys = keys;         this.items = items;         this.comparer = comparer;       }        public virtual void QuickSort(int left, int right)       {         do         {           int num1 = left;           int num2 = right;           object obj1 = this.keys.GetValue(num1 + num2 &gt;&gt; 1);           do           {               while (this.comparer.Compare(this.keys.GetValue(num1), obj1) &lt; 0)                 ++num1;               while (this.comparer.Compare(obj1, this.keys.GetValue(num2)) &lt; 0)                 --num2;             }                          if (num1 &lt;= num2)             {               if (num1 &lt; num2)               {                 object obj2 = this.keys.GetValue(num1);                 this.keys.SetValue(this.keys.GetValue(num2), num1);                 this.keys.SetValue(obj2, num2);                 if (this.items != null)                 {                   object obj3 = this.items.GetValue(num1);                   this.items.SetValue(this.items.GetValue(num2), num1);                   this.items.SetValue(obj3, num2);                 }               }               ++num1;               --num2;             }             else               break;           }           while (num1 &lt;= num2);           if (num2 - left &lt;= right - num1)           {             if (left &lt; num2)               this.QuickSort(left, num2);             left = num1;           }           else           {             if (num1 &lt; right)               this.QuickSort(num1, right);             right = num2;           }         }         while (left &lt; right);       }     } <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0422\u0430\u043a \u0447\u0442\u043e \u0436\u0435 \u0442\u0443\u0442 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442? \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434<\/p>\n<pre><code class=\"cs\">object[] keys1 = keys as object[]; object[] items1 = (object[]) null;  if (keys1 != null)   items1 = items as object[]; <\/code><\/pre>\n<p>  \u044d\u0442\u043e \u043d\u0435 \u0447\u0442\u043e \u0438\u043d\u043e\u0435, \u043a\u0430\u043a \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0432\u0430\u0440\u0438\u0430\u0446\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0434\u043b\u044f \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u043b\u0430\u0441\u0441 SorterObjectArray, \u0430 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f SorterGenericArray. \u041d\u043e \u043f\u043e\u0434\u043e\u0436\u0434\u0438\u0442\u0435, \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b? \u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0414\u043b\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u044b GetValue \u0438 SetValue, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043a\u0430\u043a \u0432\u044b \u0437\u043d\u0430\u0435\u0442\u0435, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u043c\u0438\u2026 \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e (\u0432\u0435\u0434\u044c \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u043c \u0442\u0438\u043f\u043e\u043c)? \u041d\u0435\u0442! \u041c\u0430\u0441\u0441\u0438\u0432 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e, \u043f\u0440\u0438\u0447\u0435\u043c \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e. \u0412\u0441\u0435 \u0434\u0435\u043b\u043e \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043a\u043e\u0434\u0435<\/p>\n<pre><code class=\"cs\">  if (length &gt; 1) {     if (comparer == Comparer.Default || comparer == null) {       if(TrySZSort(array, null, index, index + length - 1))         return;      } } <\/code><\/pre>\n<p>  \u0418\u043d\u0442\u0435\u0440\u0435\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 Array.TrySZSort. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043d\u0430 \u0421++ \u0432 \u0441\u0430\u043c\u043e\u0439 CLR. \u041f\u0440\u0438\u0447\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u043d \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0433\u0434\u0430 comparer == Comparer.Default || comparer == null.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 TrySZSort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">FCIMPL4(INT32, ArrayHelper::TrySZSort, ArrayBase * keys, ArrayBase * items, UINT32 left, UINT32 right)     \/\/\u0435\u0441\u043b\u0438 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0434\u0435\u043a\u0441\u043e\u043c \u043d\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c     if (keys-&gt;GetRank() != 1 || keys-&gt;GetLowerBoundsPtr()[0] != 0)         return FALSE;      \/\/ \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0438\u043f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430     TypeHandle keysTH = keys-&gt;GetElementTypeHandle();     \/\/ \u0415\u0441\u043b\u0438 \u043e\u043d \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u043c      const CorElementType keysElType = keysTH.GetSigCorElementType();     if (!CorTypeInfo::IsPrimitiveType(keysElType))         return FALSE;     if (items != NULL) {         TypeHandle itemsTH = items-&gt;GetElementTypeHandle();         if (keysTH != itemsTH)             return FALSE;   \/\/ Can't currently handle sorting different types of arrays.     }      \/\/ \u041e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430     if (left == right || right == 0xffffffff)         return TRUE;      \/\/\u0414\u0430\u043b\u0435\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u0421++.     switch(keysElType) {     case ELEMENT_TYPE_I1: \/\/ 1-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (sbyte)         ArrayHelpers&lt;I1&gt;::QuickSort((I1*) keys-&gt;GetDataPtr(), (I1*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_U1: \/\/ 1-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u0430 (byte)     case ELEMENT_TYPE_BOOLEAN: \/\/ \u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0442\u0438\u043f (bool)         ArrayHelpers&lt;U1&gt;::QuickSort((U1*) keys-&gt;GetDataPtr(), (U1*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_I2: \/\/ 2-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (short)         ArrayHelpers&lt;I2&gt;::QuickSort((I2*) keys-&gt;GetDataPtr(), (I2*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_U2: \/\/ 2-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u0430 (ushort)     case ELEMENT_TYPE_CHAR: \/\/ \u0421\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f (char)         ArrayHelpers&lt;U2&gt;::QuickSort((U2*) keys-&gt;GetDataPtr(), (U2*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_I4: \/\/ 4-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (int)         ArrayHelpers&lt;I4&gt;::QuickSort((I4*) keys-&gt;GetDataPtr(), (I4*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_U4: \/\/ 4-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u0430 (uint)         ArrayHelpers&lt;U4&gt;::QuickSort((U4*) keys-&gt;GetDataPtr(), (U4*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_R4: \/\/ 4-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (float)         ArrayHelpers&lt;R4&gt;::QuickSort((R4*) keys-&gt;GetDataPtr(), (R4*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_I8: \/\/ 8-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e (long)         ArrayHelpers&lt;I8&gt;::QuickSort((I8*) keys-&gt;GetDataPtr(), (I8*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_U8: \/\/ 8-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0446\u0435\u043b\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u0430 (ulong)         ArrayHelpers&lt;U8&gt;::QuickSort((U8*) keys-&gt;GetDataPtr(), (U8*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_R8: \/\/ 8-\u0431\u0430\u0439\u0442\u043e\u0432\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u043f\u043b\u0430\u0432\u0430\u044e\u0449\u0435\u0439 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 (double)         ArrayHelpers&lt;R8&gt;::QuickSort((R8*) keys-&gt;GetDataPtr(), (R8*) (items == NULL ? NULL : items-&gt;GetDataPtr()), left, right);         break;      case ELEMENT_TYPE_I: \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 (IntPtr)     case ELEMENT_TYPE_U: \/\/ \u0420\u0430\u0437\u043c\u0435\u0440 \u0446\u0435\u043b\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0431\u0435\u0437 \u0437\u043d\u0430\u043a\u0430 \u0432 \u043c\u0430\u0448\u0438\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435 (UIntPtr)         \/\/ In V1.0, IntPtr & UIntPtr are not fully supported types.  They do          \/\/ not implement IComparable, so searching & sorting for them should         \/\/ fail.  In V1.1 or V2.0, this should change.                                            return FALSE;      default:         return FALSE;     }     return TRUE; } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 QuickSort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/ \u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439-\u043a\u043b\u0430\u0441\u0441 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439 template &lt;class KIND&gt; class ArrayHelpers {  static void QuickSort(KIND keys[], KIND items[], int left, int right) {   do {      int i = left;      int j = right;      KIND x = keys[(i + j) &gt;&gt; 1];       do {           while (Compare(keys[i], x) &lt; 0) i++;           while (Compare(x, keys[j]) &lt; 0) j--;            if (i &gt; j) break;            if (i &lt; j) {             KIND key = keys[i];             keys[i] = keys[j];             keys[j] = key;              if (items != NULL) {                KIND item = items[i];                items[i] = items[j];                items[j] = item;              }          }        i++;        j--;      }       while (i &lt;= j);        if (j - left &lt;= right - i)          {           if (left &lt; j) QuickSort(keys, items, left, j);             left = i;          }        else          {          if (i &lt; right) QuickSort(keys, items, i, right);             right = j;         }       }        while (left &lt; right);     } }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041a \u043d\u0438\u043c \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0435 \u0442\u0438\u043f\u044b + \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 + \u0441\u0438\u043c\u0432\u043e\u043b\u044c\u043d\u044b\u0439. \u0410 \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043b\u0430\u0447\u0435\u0432\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e.<\/p>\n<p>  \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0430\u043c\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438. \u0411\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 SorterObjectArray, \u0442\u0430\u043a \u043a\u0430\u043a \u0438 \u043d\u0430\u0442\u0438\u0432\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430.<\/p>\n<p>  1. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430:<\/p>\n<pre><code class=\"cs\">object obj1 = this.keys[left1 + right1 &gt;&gt; 1]; <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u043d\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u043f\u0440\u0438 \u043f\u043b\u043e\u0445\u0438\u0445 \u0432\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u0442\u044c \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u0447\u043d\u044b\u043c. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 num1 + num2 &gt;&gt; 1, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0442\u0438\u043f\u0430 int. \u0422\u0430\u043a\u0430\u044f \u0436\u0435 \u043e\u0448\u0438\u0431\u043a\u0430 \u0431\u044b\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u043d\u0430 \u0432 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0435 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 Java (<a href=\"http:\/\/bugs.sun.com\/bugdatabase\/view_bug.do?bug_id=5045582\">\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0431\u0430\u0433<\/a>).<\/p>\n<p>  \u041a\u0430\u043a \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 .NET \u044d\u0442\u043e\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d.<\/p>\n<p>  2. \u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043a\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u044e\u0449\u0430\u044f \u043e\u0434\u043d\u0443 \u0432\u0435\u0442\u0432\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438: \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043e\u0431\u043e\u0438\u0445 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044c\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0446\u0438\u043a\u043b\u0435 \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u0436\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b. \u0421 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u0440\u0435\u0434\u043d\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0435\u0442: \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u0438 \u043d\u0430 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u043d \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0438 \u0446\u0438\u043a\u043b\u0430 \u2014 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430. \u0417\u0430\u0442\u043e \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438, \u043d\u0438 \u043f\u0440\u0438 \u043a\u0430\u043a\u0438\u0445 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430\u0445 \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 log<sub>2<\/sub>n, \u0430 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0432\u044b\u0440\u043e\u0436\u0434\u0435\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043e\u043d\u0430 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 2 \u2014 \u0432\u0441\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438.<\/p>\n<h4>.NET 2.0<\/h4>\n<p>  \u041d\u043e\u0432\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0430 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 .NET 2.0 \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u0442\u043e \u044f \u0431\u0443\u0434\u0443 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<pre><code class=\"cs\">public static void Sort&lt;T&gt;(T[] array, int index, int length, IComparer&lt;T&gt; comparer)     {       \/\/ TrySZSort \u0432\u0441\u0435 \u0435\u0449\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0447\u0435\u043c \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.        \/\/ \u041f\u0440\u0438\u0447\u0438\u043d\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430 Int32.CompareTo \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0447\u0435\u043c &quot;&lt;&quot; \u0438\u043b\u0438 &quot;&gt;&quot;.       if (length &lt;= 1 || (comparer == null || comparer == Comparer&lt;T&gt;.Default) &&            Array.TrySZSort((Array) array, (Array) null, index, index + length - 1))         return;       ArraySortHelper&lt;T&gt;.Default.Sort(array, index, length, comparer);     } <\/code><\/pre>\n<p>  \u0410 \u0432\u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0435\u0442\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">QuickSort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">private static void SwapIfGreaterWithItems(T[] keys, IComparer&lt;T&gt; comparer, int a, int b)     {       if (a == b || comparer.Compare(keys[a], keys[b]) &lt;= 0)         return;       T obj = keys[a];       keys[a] = keys[b];       keys[b] = obj;     }  internal static void QuickSort(T[] keys, int left, int right, IComparer&lt;T&gt; comparer)     {       do       {         int index1 = left;         int index2 = right;         int index3 = index1 + (index2 - index1 &gt;&gt; 1);         ArraySortHelper&lt;T&gt;.SwapIfGreaterWithItems(keys, comparer, index1, index3);         ArraySortHelper&lt;T&gt;.SwapIfGreaterWithItems(keys, comparer, index1, index2);         ArraySortHelper&lt;T&gt;.SwapIfGreaterWithItems(keys, comparer, index3, index2);         T obj1 = keys[index3];         do         {           while (comparer.Compare(keys[index1], obj1) &lt; 0)             ++index1;           while (comparer.Compare(obj1, keys[index2]) &lt; 0)             --index2;           if (index1 &lt;= index2)           {             if (index1 &lt; index2)             {               T obj2 = keys[index1];               keys[index1] = keys[index2];               keys[index2] = obj2;             }             ++index1;             --index2;           }           else             break;         }         while (index1 &lt;= index2);         if (index2 - left &lt;= right - index1)         {           if (left &lt; index2)             ArraySortHelper&lt;T&gt;.QuickSort(keys, left, index2, comparer);           left = index1;         }         else         {           if (index1 &lt; right)             ArraySortHelper&lt;T&gt;.QuickSort(keys, index1, right, comparer);           right = index2;         }       }       while (left &lt; right);     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u0441\u0435 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c, \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u044f \u043d\u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u0438\u0439 (\u0441\u043c\u043e\u0442\u0440\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432). \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443.<\/p>\n<p>  \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u043f\u043e\u0440\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0442\u0435\u043f\u0435\u0440\u044c \u0431\u0435\u0440\u0435\u0442\u0441\u044f \u043d\u0435 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u0430 \u043c\u0435\u0434\u0438\u0430\u043d\u0430 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0433\u043e, \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u043d\u043e\u0433\u043e \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. <\/p>\n<pre><code class=\"cs\">int index3 = index1 + (index2 - index1 &gt;&gt; 1); \/\/\u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 ArraySortHelper&lt;T&gt;.SwapIfGreaterWithItems(keys, comparer, index1, index3); ArraySortHelper&lt;T&gt;.SwapIfGreaterWithItems(keys, comparer, index1, index2); ArraySortHelper&lt;T&gt;.SwapIfGreaterWithItems(keys, comparer, index3, index2); T obj1 = keys[index3]; <\/code><\/pre>\n<p>  \u041a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e \u0444\u043e\u0440\u043c\u0443\u043b\u0435 index1 + (index2 \u2014 index1 &gt;&gt; 1), \u0447\u0442\u043e \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u0435\u0440\u0435\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435\u043c.<\/p>\n<p>  \u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0441\u0435 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<p>  <i><b>\u0422\u0435\u043f\u0435\u0440\u044c \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0435 \u043e\u0442\u0441\u0442\u0443\u043f\u043b\u0435\u043d\u0438\u0435:<\/b><\/i> \u043f\u0443\u0441\u0442\u044c \u043d\u0430\u043c \u043d\u0430\u0434\u043e \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e \u043c\u0430\u0441\u0441\u0438\u0432 \u0446\u0435\u043b\u044b\u0445 \u0447\u0438\u0441\u0435\u043b. \u041a\u0430\u043a \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c?<\/p>\n<p>  \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u044f \u0432\u0441\u0435 \u0432\u044b\u0448\u0435\u0441\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0435, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434<\/p>\n<pre><code class=\"cs\">Array.Sort(a); Array.Reverse(a); <\/code><\/pre>\n<p>  \u043d\u0430 \u043c\u043e\u0435\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0432 3 \u0440\u0430\u0437\u0430 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c<\/p>\n<pre><code class=\"cs\">Array.Sort(a, (x, y) =&gt; -x.CompareTo(y)) <\/code><\/pre>\n<p>  \u0412\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0441\u043c\u0443\u0442\u0438\u0442\u044c \u0442\u043e\u0442 \u0444\u0430\u043a\u0442, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 Array.Reverse \u043d\u0435 \u043e\u0431\u043e\u0431\u0449\u0435\u043d, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442, \u0441\u043e \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u043c\u0438 \u0442\u0438\u043f\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e (\u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0430 \u0438 \u043c\u0435\u0442\u043e\u0434\u044b GetValue, SetValue), \u043d\u043e \u0435\u0441\u043b\u0438 \u0432\u0437\u0433\u043b\u044f\u043d\u0443\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043c\u044b \u043e\u043f\u044f\u0442\u044c \u0443\u0432\u0438\u0434\u0438\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 Array.TrySZReverse, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Reverse<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">template &lt;class KIND&gt; static void Reverse(KIND array[], UINT32 index, UINT32 count) {         if (count == 0) {             return;         }         UINT32 i = index;         UINT32 j = index + count - 1;         while(i &lt; j) {             KIND temp = array[i];             array[i] = array[j];             array[j] = temp;             i++;             j--;         }     } }; <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0412 \u043e\u0431\u0449\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043d\u0430\u0441 \u043f\u043e\u0434\u0436\u0438\u0434\u0430\u044e\u0442 \u0437\u0430 \u043a\u0430\u0436\u0434\u044b\u043c \u0443\u0433\u043b\u043e\u043c.<\/p>\n<p>  \u041a\u0441\u0442\u0430\u0442\u0438 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u0447\u0442\u043e \u043d\u0435\u0442 \u043e\u0431\u043e\u0431\u0449\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430. \u0415\u0441\u0442\u044c \u043c\u0435\u0442\u043e\u0434 Reverse \u043a\u0430\u043a \u043c\u0435\u0442\u043e\u0434 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0443 Enumerable, \u043d\u043e \u0435\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u043a \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043d\u0435 \u043d\u0430 \u043c\u0435\u0441\u0442\u0435. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0432\u044b\u0437\u043e\u0432 Array.Reverse \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0445 \u0437\u043d\u0430\u0447\u0438\u043c\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0432\u0441\u0435\u0433\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0430\u0432\u0442\u043e\u0431\u043e\u043a\u0441\u0438\u043d\u0433\u0443.<\/p>\n<h4>.NET 3.0 \u2014 .NET 4.0<\/h4>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u043f\u0440\u0435\u0442\u0435\u0440\u043f\u0435\u043b \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439.<\/p>\n<h4>.NET 4.5<\/h4>\n<p>  \u0421\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0437\u0434\u0435\u0441\u044c!<\/p>\n<p>  \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043a \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0430\u0440\u0443 \u0441\u043b\u043e\u0432 \u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u0438 .NET 4.5. \u0414\u043b\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441\u043e\u0432\u0435\u0442\u0443\u044e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u044d\u0442\u0443 <a href=\"http:\/\/www.west-wind.com\/weblog\/posts\/2012\/Mar\/13\/NET-45-is-an-inplace-replacement-for-NET-40\">\u0441\u0442\u0430\u0442\u044c\u044e<\/a> (\u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c). \u041f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 VS 2012, \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 .NET 4.5 \u043e\u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 4 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u0432\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0438\u0448\u0435\u0442\u0435 \u043d\u0430 .NET 4 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 .NET 4.5. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0432\u0435\u0449\u044c: \u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 4.5 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043e\u0434\u0438\u043d \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043f\u0440\u0438\u0447\u0435\u043c \u0432\u0441\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0431\u0435\u0437 \u0432\u0430\u0448\u0435\u0433\u043e \u0432\u0435\u0434\u043e\u043c\u0430. <\/p>\n<p>  \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442, \u0432\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u0438\u0437 .NET 4.5:<\/p>\n<pre><code class=\"cs\">public void Sort(T[] keys, int index, int length, IComparer&lt;T&gt; comparer)  {    if (BinaryCompatibility.TargetsAtLeast_Desktop_V4_5)      ArraySortHelper&lt;T&gt;.IntrospectiveSort(keys, index, length, comparer);    else      ArraySortHelper&lt;T&gt;.DepthLimitedQuickSort(keys, index, length + index - 1, comparer, 32);  } <\/code><\/pre>\n<p>  \u041a\u0430\u043a \u0432\u044b \u0432\u0438\u0434\u0438\u0442\u0435, \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u0442\u043e, \u0432 \u043a\u0430\u043a\u043e\u043c .NET \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c: \u0435\u0441\u043b\u0438 \u044d\u0442\u043e 4.5, \u0442\u043e \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c IntrospectiveSort \u0435\u0441\u043b\u0438 \u044d\u0442\u043e 4.0 \u0442\u043e DepthLimitedQuickSort.<\/p>\n<p>  \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0432\u044b\u044f\u0441\u043d\u0438\u043c \u0447\u0435\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f DepthLimitedQuickSort \u043e\u0442 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u0432 .NET 4.0 \u0434\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 VS 2012. \u0412\u0437\u0433\u043b\u044f\u043d\u0435\u043c \u043d\u0430 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">DepthLimitedQuickSort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">internal static void DepthLimitedQuickSort(T[] keys, int left, int right, IComparer&lt;T&gt; comparer, int depthLimit)     {       while (depthLimit != 0)       {         int index1 = left;         int index2 = right;         int index3 = index1 + (index2 - index1 &gt;&gt; 1);         ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, index1, index3);         ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, index1, index2);         ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, index3, index2);         T obj1 = keys[index3];         do         {           while (comparer.Compare(keys[index1], obj1) &lt; 0)             ++index1;           while (comparer.Compare(obj1, keys[index2]) &lt; 0)             --index2;           if (index1 &lt;= index2)           {             if (index1 &lt; index2)             {               T obj2 = keys[index1];               keys[index1] = keys[index2];               keys[index2] = obj2;             }             ++index1;             --index2;           }           else             break;         }         while (index1 &lt;= index2);         --depthLimit;         if (index2 - left &lt;= right - index1)         {           if (left &lt; index2)             ArraySortHelper&lt;T&gt;.DepthLimitedQuickSort(keys, left, index2, comparer, depthLimit);           left = index1;         }         else         {           if (index1 &lt; right)             ArraySortHelper&lt;T&gt;.DepthLimitedQuickSort(keys, index1, right, comparer, depthLimit);           right = index2;         }         if (left &gt;= right)           return;       }       ArraySortHelper&lt;T&gt;.Heapsort(keys, left, right, comparer);     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435 \u044d\u0442\u043e \u0442\u0430 \u0436\u0435 \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u0430 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u0434\u043d\u043e\u0433\u043e: \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443, \u0435\u0441\u043b\u0438 \u043c\u044b \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u0435\u043c \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0440\u0430\u0432\u043d\u0430 32.<\/p>\n<p>  \u0410 \u0432\u043e\u0442 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Heapsort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">private static void Heapsort(T[] keys, int lo, int hi, IComparer&lt;T&gt; comparer)     {       int n = hi - lo + 1;       for (int i = n \/ 2; i &gt;= 1; --i)         ArraySortHelper&lt;T&gt;.DownHeap(keys, i, n, lo, comparer);       for (int index = n; index &gt; 1; --index)       {         ArraySortHelper&lt;T&gt;.Swap(keys, lo, lo + index - 1);         ArraySortHelper&lt;T&gt;.DownHeap(keys, 1, index - 1, lo, comparer);       }     } private static void DownHeap(T[] keys, int i, int n, int lo, IComparer&lt;T&gt; comparer)     {       T x = keys[lo + i - 1];       for (; i &lt;= n \/ 2; { int num; i = num;})       {         num = 2 * i;         if (num &lt; n && comparer.Compare(keys[lo + num - 1], keys[lo + num]) &lt; 0)           ++num;         if (comparer.Compare(x, keys[lo + num - 1]) &lt; 0)           keys[lo + i - 1] = keys[lo + num - 1];         else           break;       }       keys[lo + i - 1] = x;     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c DepthLimitedQuickSort \u0435\u0441\u0442\u044c \u043d\u0438 \u0447\u0442\u043e \u0438\u043d\u043e\u0435 \u043a\u0430\u043a IntroSort.<\/p>\n<p>  <i>Introsort \u0438\u043b\u0438 \u0438\u043d\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u2014 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0414\u044d\u0432\u0438\u0434\u043e\u043c \u041c\u044e\u0441\u0441\u0435\u0440\u043e\u043c \u0432 1997 \u0433\u043e\u0434\u0443. \u041e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443, \u043a\u043e\u0433\u0434\u0430 \u0433\u043b\u0443\u0431\u0438\u043d\u0430 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438 \u043f\u0440\u0435\u0432\u044b\u0441\u0438\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c. \u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u0441\u043e\u0447\u0435\u0442\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0434\u043e\u0441\u0442\u043e\u0438\u043d\u0441\u0442\u0432\u0430 \u043e\u0431\u043e\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u0441 \u0445\u0443\u0434\u0448\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0435\u043c O(n log n) \u0438 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c, \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u043c \u0441 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439. \u0422\u0430\u043a \u043a\u0430\u043a \u043e\u0431\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f, \u044d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0438\u0442 \u043a\u043b\u0430\u0441\u0441\u0443 \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.<\/i><\/p>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0442\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0432 IntrospectiveSort. \u0424\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u044d\u0442\u043e \u0442\u0430 \u0436\u0435 \u0438\u043d\u0442\u0440\u043e\u0441\u043f\u0435\u043a\u0442\u0438\u0432\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f. \u041a\u0441\u0442\u0430\u0442\u0438, MSDN \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">IntroSort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">private static void IntroSort(T[] keys, int lo, int hi, int depthLimit, IComparer&lt;T&gt; comparer)     {       for (; hi &gt; lo; {int num; hi = num - 1;})       {         int num = hi - lo + 1;         if (num &lt;= 16) \/\/\u0435\u0441\u043b\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0435\u043d\u044c\u0448\u0435 16 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438         {           if (num == 1) \/\/\u0435\u0441\u043b\u0438 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442             break;           if (num == 2) \/\/\u0435\u0441\u043b\u0438 \u0434\u0432\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430           {             ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, lo, hi);             break;           }           else if (num == 3) \/\/\u0435\u0441\u043b\u0438 \u0442\u0440\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430           {             ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, lo, hi - 1);             ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, lo, hi);             ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, hi - 1, hi);             break;           }           else           {             ArraySortHelper&lt;T&gt;.InsertionSort(keys, lo, hi, comparer); \/\/\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438             break;           }         }         else if (depthLimit == 0) \/\/\u0435\u0441\u043b\u0438 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043b\u0438 \u0433\u043b\u0443\u0431\u0438\u043d\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0438         {           ArraySortHelper&lt;T&gt;.Heapsort(keys, lo, hi, comparer); \/\/\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443           break;         }         else \/\/ \u0438\u043d\u0430\u0447\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438         {           --depthLimit;           num = ArraySortHelper&lt;T&gt;.PickPivotAndPartition(keys, lo, hi, comparer);           ArraySortHelper&lt;T&gt;.IntroSort(keys, num + 1, hi, depthLimit, comparer);         }       }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">PickPivotAndPartition<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 private static int PickPivotAndPartition(T[] keys, int lo, int hi, IComparer&lt;T&gt; comparer)     {       int index = lo + (hi - lo) \/ 2;       ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, lo, index);       ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, lo, hi);       ArraySortHelper&lt;T&gt;.SwapIfGreater(keys, comparer, index, hi);       T obj = keys[index];       ArraySortHelper&lt;T&gt;.Swap(keys, index, hi - 1);       int i = lo;       int j = hi - 1;       while (i &lt; j)       {         do           ;         while (comparer.Compare(keys[++i], obj) &lt; 0);         do           ;         while (comparer.Compare(obj, keys[--j]) &lt; 0);         if (i &lt; j)           ArraySortHelper&lt;T&gt;.Swap(keys, i, j);         else           break;       }       ArraySortHelper&lt;T&gt;.Swap(keys, i, hi - 1);       return i;  } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">InsertionSort<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">\/\/\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 private static void InsertionSort(T[] keys, int lo, int hi, IComparer&lt;T&gt; comparer)     {       for (int index1 = lo; index1 &lt; hi; ++index1)       {         int index2 = index1;         T x;         for (x = keys[index1 + 1]; index2 &gt;= lo && comparer.Compare(x, keys[index2]) &lt; 0; --index2)           keys[index2 + 1] = keys[index2];         keys[index2 + 1] = x;       }     } <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u0441\u043c\u0435\u0441\u044c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043e\u043a: \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438, \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0438 \u043f\u0438\u0440\u0430\u043c\u0438\u0434\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443.<\/p>\n<p>  \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 Introsort \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0434\u0430\u043d\u043d\u044b\u0435 \u0431\u044b\u0432\u0430\u044e\u0442 \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u044b, \u0430 \u043d\u0430 \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440\u043e.<\/p>\n<h4>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h4>\n<p>  <img decoding=\"async\" src=\"http:\/\/habrastorage.org\/storage2\/03a\/28d\/51f\/03a28d51fd0ccfaad3170cb3ba560bfd.png\"\/><\/p>\n<h4>\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 Java<\/h4>\n<p>  \u0412 \u043f\u043b\u0430\u043d\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 Java \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 .NET. \u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u0430\u043a \u0438 \u0432 .NET \u0432 Java \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0430\u043a \u0436\u0435 \u043c\u0435\u043d\u044f\u043b\u0441\u044f.<\/p>\n<p>  \u041a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u043e\u043c \u043f\u0440\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432 Java \u00ab\u0432\u0441\u0451 \u043a\u0430\u043a \u0431\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u044b\u00bb, \u0442\u043e \u044d\u0442\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u043b\u0438\u044f\u043d\u0438\u0435\u043c. \u0414\u0430\u043d\u043d\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439 \u0438 \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442 O(n logn) \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043e\u0434\u043d\u0430\u043a\u043e \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 O(n) \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438. <\/p>\n<p>  \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043c\u0435\u043d\u044f\u0435\u043c \u043b\u0438 \u043c\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0441 \u043e\u0434\u043d\u0438\u043c \u043a\u043b\u044e\u0447\u043e\u043c \u0438\u043b\u0438 \u043d\u0435\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 Java \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043d\u044b\u0439 \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 \u2014 DualPivotQuicksort. \u041e\u0431\u044b\u0447\u043d\u044b\u0439 Quicksort \u0434\u0435\u043b\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 \u0434\u0432\u0430 \u043e\u0442\u0440\u0435\u0437\u043a\u0430, \u0432\u044b\u0431\u0440\u0430\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442 P. \u041f\u043e\u0442\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043c\u0435\u043d\u044c\u0448\u0435 P \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 \u043f\u0435\u0440\u0432\u044b\u0439 \u043e\u0442\u0440\u0435\u0437\u043e\u043a, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u2014 \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439. \u0417\u0430\u0442\u0435\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0438 \u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c \u043e\u0442\u0440\u0435\u0437\u043a\u0430\u0445. DualPivotQuicksort \u0434\u0435\u043b\u0438\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u043d\u0430 \u0442\u0440\u0438 \u043e\u0442\u0440\u0435\u0437\u043a\u0430, \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u0443\u0445. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f.<\/p>\n<p>  \u0412 Java 7 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0441\u0441\u044b\u043b\u043e\u0447\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043f\u043e\u043c\u0435\u043d\u044f\u043b\u0441\u044f \u043d\u0430 TimSort.<\/p>\n<p>  <i>Timsort \u2014 \u0433\u0438\u0431\u0440\u0438\u0434\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438, \u0441\u043e\u0447\u0435\u0442\u0430\u044e\u0449\u0438\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0432\u0441\u0442\u0430\u0432\u043a\u0430\u043c\u0438 \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 \u0441\u043b\u0438\u044f\u043d\u0438\u0435\u043c, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 2002 \u0433\u043e\u0434\u0443 \u0422\u0438\u043c\u043e\u043c \u041f\u0435\u0442\u0435\u0440\u0441\u043e\u043c. \u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f Timsort \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 Python, OpenJDK 7 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u0432 Android JDK 1.5. \u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0430\u0441\u0442\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432 \u0441\u0435\u0431\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0434\u043c\u0430\u0441\u0441\u0438\u0432\u044b. \u041d\u0430 \u0442\u0430\u043a\u0438\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 Timsort \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043c\u043d\u043e\u0433\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/i><\/p>\n<p>  Timsort \u2014 \u0431\u044b\u0441\u0442\u0440, \u043e\u0434\u043d\u0430\u043a\u043e \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0443\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 30 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435.<\/p>\n<p>  \u0427\u0442\u043e \u0432\u044b \u0434\u0443\u043c\u0430\u0435\u0442\u0435 \u043e\u0431 \u044d\u0442\u043e\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0438 \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0434\u0432\u0443\u0445 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a\u0430\u0445? \u0422\u0430\u043a \u043b\u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0442\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c, \u0438 \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 Java? \u0418\u043b\u0438 \u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0431\u0435\u0437 \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u0438, \u0432\u0437\u0430\u043c\u0435\u043d \u043d\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0438 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u0438 \u043a\u0430\u043a \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432 .NET? \u041b\u0438\u0447\u043d\u043e \u044f \u043e\u0442\u0434\u0430\u044e \u0441\u0432\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 .NET, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c \u043d\u0443\u0436\u043d\u0430 \u043b\u0438\u0448\u044c \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442, \u043d\u0435 \u0442\u0430\u043a \u0447\u0430\u0441\u0442\u043e, \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435, \u0443 \u043c\u0435\u043d\u044f \u0437\u0430 4 \u0433\u043e\u0434\u0430 \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043d\u0438 \u0440\u0430\u0437, \u043d\u0443, \u0430 \u0435\u0441\u043b\u0438 \u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0435\u0442 \u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0442\u0430\u043a\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043f\u043b\u0435\u0447\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0430, \u0434\u0443\u043c\u0430\u044e, \u0435\u0433\u043e \u043d\u0435 \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0438\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438.<\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>  \u0411\u044b\u0442\u044c \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u043e .NET \u043d\u0443\u0436\u043d\u044b \u043d\u0435 \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442\u0443, \u043d\u043e \u0434\u0443\u043c\u0430\u044e, \u0438\u0445 \u0437\u043d\u0430\u043d\u0438\u0435 \u043d\u0435 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442 \u043d\u0438\u043a\u043e\u043c\u0443. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0438\u0437\u043e\u0449\u0440\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u044c\u044e\u0435\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u043e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0435 \u043d\u0430 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0438. \u0412 \u043e\u0431\u0449\u0435\u043c, \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u043f\u0440\u043e\u0447\u0442\u0435\u043d\u0438\u0435. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0442\u0430\u0442\u044c\u044f \u043e\u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439.    \t<\/p>\n<div class=\"clear\"><\/div>\n<\/p><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/188012\/\"> http:\/\/habrahabr.ru\/post\/188012\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div class=\"content html_format\">   \t\u0417\u0430\u0434\u0430\u0447\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u043b\u0436\u0435\u043d \u0437\u043d\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u0435 \u2014 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u043d\u0430 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 .NET. \u042f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0432 .NET, \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e \u0435\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445, \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441 Java. <\/p>\n<p>  \u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 .NET \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \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 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u0432 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443:  <\/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-188012","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/188012","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=188012"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/188012\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=188012"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=188012"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=188012"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}