<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=689588</guid>
        <pubDate>Wed, 20 Apr 2005 20:15:02 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=689588</link>
        <description><![CDATA[Ярослав: Госопода, так ведь существует же обыкновенный метод сортировкм с помощью дерева&#33; Это тот, когда мы выбираем из соседних пар меньший ключ и т.д., пока не найдем наименьший элемент. В связи с этим у меня вопрос. После того, как дерево построено и мы начинаем обход, то при спуске мы должны сотворить log n<br>сравнений(чтобы понимать, куда идтить, влево или вправо). После того, как мы заменяем один из элементов массива(наименьший из сущ.) на &quot;дыру&quot;, мы должны скорректировать дерево и подняться наверх. для этго ведь тоже надо log n сравнений&#33; Всего получаем 2log n*n Почему же везде пишут, что их log2*n? Объясните мне, пожалуйста&#33; Да, я еще прогу неотлаживал, однако в случае нечетного кол-ва элементов алгоритм сохраняется?Я думаю, что да, а вы? :)]]></description>
        <author>Ярослав</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528944</guid>
        <pubDate>Wed, 01 Dec 2004 07:31:42 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528944</link>
        <description><![CDATA[Kheor: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>tserega, 30.11.04, 22:02, 528700</span><div class='quote '>Где-то читал, что хорошо себя проявляет модификация quicksort-а, где при небольшом количестве элементов (порядка 10) используется сортировка вставками... </div></div><br>
Кхм, скорее всего оно действительно станет работать быстрее, но код резко усложнится, а при количестве порядка 10^5 - 10^6 элементов, это вряд ли сильно повлияет на скорость, хотя надо попробовать<br>
<br>
PS Опять таки из олимпиадной практики: достаточно написать обычный qsort и будет счастье =)]]></description>
        <author>Kheor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528700</guid>
        <pubDate>Tue, 30 Nov 2004 19:02:42 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528700</link>
        <description><![CDATA[tserega: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Kheor, 29.11.04, 22:22, 527418</span><div class='quote '>qsort в среднем работает ~ в 4 раза быстрее сортировки кучей</div></div><br>
Во многом благодаря тому, что все операции очень простые (тоже из олимпиадной практики).<br>
Где-то читал, что хорошо себя проявляет модификация quicksort-а, где при небольшом количестве элементов (порядка 10) используется сортировка вставками...]]></description>
        <author>tserega</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528674</guid>
        <pubDate>Tue, 30 Nov 2004 18:18:09 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528674</link>
        <description><![CDATA[Kheor: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>mo3r, 30.11.04, 15:42, 528287</span><div class='quote '>Я оказался неправ.</div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>mo3r, 30.11.04, 15:42, 528287</span><div class='quote '>Предложенный qsort работает в 2 раза медленнее, чем написанный мною heapsort.</div></div><br>
Так ты ведь и говорил, что qsort медленнее работает:<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>mo3r, 29.11.04, 19:38, 527232</span><div class='quote '>когда я мерял на совершенно разных входных данных, получалось, что они либо одинаково работают, либо QuickSort медленнее</div></div><br>
<br>
Покажи свою реализацию heap-sort&#39;а очень интересно посмотреть]]></description>
        <author>Kheor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528287</guid>
        <pubDate>Tue, 30 Nov 2004 12:42:26 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=528287</link>
        <description><![CDATA[mo3r: Итак, результат. Я оказался неправ. Причина, скорее всего, в реализациях qsort, которые я проверял. Предложенный qsort работает в 2 раза медленнее, чем написанный мною heapsort. Причем в независимости от характера исходных данных. (Исключая вариант с очень небольшими границами изменениями элементов массива).]]></description>
        <author>mo3r</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527418</guid>
        <pubDate>Mon, 29 Nov 2004 19:22:52 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527418</link>
        <description><![CDATA[Kheor: ну, то что это неплохая реализация это точно:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp;a: array of longint;</div><div class="code_line">&nbsp;&nbsp; &nbsp;c, i: longint;</div><div class="code_line">&nbsp;</div><div class="code_line">procedure qs( l, r: longint);</div><div class="code_line">var</div><div class="code_line">&nbsp;&nbsp; &nbsp;i, j, m: longint;</div><div class="code_line">begin</div><div class="code_line">&nbsp;&nbsp; &nbsp;i := l;</div><div class="code_line">&nbsp;&nbsp; &nbsp;j := r;</div><div class="code_line">&nbsp;&nbsp; &nbsp;m := a[l + random(r - l + 1)]; //тут избавляемся от возможной квадратичной скорости</div><div class="code_line">&nbsp;&nbsp; &nbsp;while i &#60;= j do begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while a[i] &#60; m do inc(i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;while a[j] &#62; m do dec(j);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if i &#60;= j then begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;c := a[i];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[i] := a[j];</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;a[j] := c;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inc(i);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;dec(j);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;end;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if l &#60; j then qs(l, j);</div><div class="code_line">&nbsp;&nbsp; &nbsp;if i &#60; r then qs(i, r);</div><div class="code_line">end;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
А, вообще, qsort в среднем работает ~ в 4 раза быстрее сортировки кучей. (это из олимпиадной практики)]]></description>
        <author>Kheor</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527299</guid>
        <pubDate>Mon, 29 Nov 2004 17:51:05 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527299</link>
        <description><![CDATA[mo3r: <strong class='tag-b'>wormball</strong>, нет, я специально делал несколько вариантов и выбрал наилучший. Тот вариант, который в стандартной поставке BP7.0&#092;Examples&#092;DOS&#092;QuickSort.pas даже не принимался в расчет. В принципе, можно повторить замеры производительности. Я постараюсь найти ту программу, которой я пользовался. Кстати, если ты предложишь вариант QuickSort, который будет работать быстрее HeapSort, то это будет очень интересно.]]></description>
        <author>mo3r</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527275</guid>
        <pubDate>Mon, 29 Nov 2004 17:22:38 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527275</link>
        <description><![CDATA[wormball: мож у тебя quicksort был паршивый?]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527232</guid>
        <pubDate>Mon, 29 Nov 2004 16:38:05 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527232</link>
        <description><![CDATA[mo3r: <strong class='tag-b'>wormball</strong>, когда я мерял на совершенно разных входных данных, получалось, что они либо одинаково работают, либо QuickSort медленнее. Причем разница могла быть существенной в зависимости от характера входных данных.]]></description>
        <author>mo3r</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527098</guid>
        <pubDate>Mon, 29 Nov 2004 14:54:24 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=527098</link>
        <description><![CDATA[wormball: специально по этому случаю выботал heap sort. книжка называется &quot;жемчужины программирования&quot;. нормального русскоязычного объяснения я в инете не нашёл, валяются одни реализации, поэтому попробую объяснить своими словами.<br>
<br>
итак, кучей (heap) (не путать с динамической памятью и кучами дерьма) называется такое двоичное дерево, что:<br>
1. значение предка не больше значений потомков.<br>
2. &quot;все веточки примерно одинаковой длины&quot;. то есть длины отличаются не более чем на 1.<br>
3. все длинные веточки сгруппированы слева.<br>
<br>
например<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">кучи</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 21</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; &nbsp;\</div><div class="code_line">&nbsp;&nbsp; 23 &nbsp; &nbsp; 48</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ &nbsp; / &nbsp;\</div><div class="code_line">&nbsp;37 &nbsp;29 85 &nbsp;48</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;1</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; &nbsp;\</div><div class="code_line">&nbsp;&nbsp; &nbsp;2 &nbsp; &nbsp; 3</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ </div><div class="code_line">&nbsp;4 &nbsp; 5 &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">не кучи</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 15</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; &nbsp;\</div><div class="code_line">&nbsp;&nbsp; 23 &nbsp; &nbsp; 65 &#60;- 65 больше, чем 48 (нарушение п. 1)</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ &nbsp; / &nbsp;\</div><div class="code_line">&nbsp;37 &nbsp;29 85 &nbsp;48</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; 1</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; / &nbsp; \</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;2 &nbsp; &nbsp; 3</div><div class="code_line">&nbsp;&nbsp; &nbsp;/ &nbsp;\ </div><div class="code_line">&nbsp;&nbsp; 4 &nbsp; 5 &nbsp; </div><div class="code_line">&nbsp;/ &nbsp;\</div><div class="code_line">&nbsp;6 &nbsp;7 &nbsp; &nbsp;&#60;- ветви оканчиваются на трёх уровнях (нарушение п. 2)</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 1</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; \</div><div class="code_line">&nbsp;&nbsp; &nbsp;2 &nbsp; &nbsp; 3</div><div class="code_line">&nbsp;&nbsp;/ &nbsp; &nbsp; &nbsp; &nbsp;\ </div><div class="code_line">&nbsp;4 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp;&#60;- потомки не сгруппированы (нарушение п. 3)</div></ol></div></div></div></div><br>
прикол в том, что деревья подобного вида (удовлетворяющие пп. 2 и 3) можно организовать с помощью массива, не прибегая к указателям. например, вышеприведённые кучи будут выглядеть так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">21 23 48 37 29 85 48</div><div class="code_line">1 2 3 4 5</div></ol></div></div></div></div><br>
, то есть все вершины записываются туда по порядку, начиная с первого уровня. при этом всегда можно восстановить вид дерева, пользуясь свойствами 2 и 3. адреса предков и потомков вершины с номером n будут выражаться так(массив нумеруется с единицы, а не с нуля):<br>
предок(n) = n/2 (или n shr 1) (целочисленное деление на 2)<br>
левый потомок(n) = n*2 (или n shl 1)<br>
правый потомок(n) = n*2+1 (или n shl 1 + 1)<br>
<br>
при этом наименьший элемент кучи всегда будет в её начале.<br>
<br>
далее. предположим, что мы имеем кучу и хотим добавить к ней один элемент. записываем его в конец кучи, а затем поступаем так: если он меньше своего родителя, то меняем его местами с родителем, потом снова сравниваем, и так пока он не станет на своё место.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">просеивание вверх</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 21</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; &nbsp;\</div><div class="code_line">&nbsp;&nbsp; 23 &nbsp; &nbsp; 48</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ &nbsp; / &nbsp;\</div><div class="code_line">&nbsp;37 &nbsp;29 85 &nbsp;17&#60;новый елемент</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 21</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; &nbsp;\</div><div class="code_line">&nbsp;&nbsp; 23 &nbsp; &nbsp; 17&#60;</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ &nbsp; / &nbsp;\</div><div class="code_line">&nbsp;37 &nbsp;29 85 &nbsp;48</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 17&#60;</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; &nbsp;\</div><div class="code_line">&nbsp;&nbsp; 23 &nbsp; &nbsp; 21</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ &nbsp; / &nbsp;\</div><div class="code_line">&nbsp;37 &nbsp;29 85 &nbsp;48</div></ol></div></div></div></div><br>
таким образом мы вновь получили кучу.<br>
если же, наоборот, новый элемент оказался во главе кучи, надо его менять местами с наименьшим из потомков.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">просеивание вниз</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 10&#60;</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp; &nbsp;\</div><div class="code_line">&nbsp;&nbsp; &nbsp;2 &nbsp; &nbsp; 3</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ </div><div class="code_line">&nbsp;4 &nbsp; 5 &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 2</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp;\</div><div class="code_line">&nbsp;&nbsp; 10&#60; &nbsp; 3</div><div class="code_line">&nbsp;&nbsp;/ &nbsp;\ </div><div class="code_line">&nbsp;4 &nbsp; 5 &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; 2</div><div class="code_line">&nbsp;&nbsp; &nbsp; / &nbsp;\</div><div class="code_line">&nbsp;&nbsp; &nbsp;4 &nbsp; &nbsp;3</div><div class="code_line">&nbsp;&nbsp;/ &nbsp; \ </div><div class="code_line">&nbsp;10&#60; &nbsp; 5</div></ol></div></div></div></div>заметьте, сложность обеих вышеописанных операций не более O(ln n). если мы хотим изъять из кучи наименьший элемент, мы берём этот элемент (который всегда будет расположен в вершине) и ставим в вершину кучи, а затем проделываем вышеозначенную операцию.<br>
<br>
сортировка же с помощью кучи будет заключаться в следующем. возьмём сортируемый массив и изначально пустую кучу. будем добавлять в неё элементы массива, пока не добавим весь массив. затем будем извлекать из неё наименьшие элементы и записывать последовательно в массив, опять же пока не извлечём всё до последней капли. в итоге наш массив будет отсортирован.<br>
<br>
мы видим, что так нам требуется дополнительный массив для кучи. но этого можно избежать, если заметить, что каждый раз, увеличивая кучу, мы уменьшаем массив, и наоборот. поэтому кучу можно организовать прямо в начале массива. добавление элемента в кучу будет сводиться к увеличению переменной, знаменующей собой размер кучи, и просеиванию последнего элемента вверх. а изымаемые элементы из кучи придётся складывать в конец массива, поэтому массив будет отсортирован наоборот, но это легко исправить, заменив сравнения элементов на противоположные. таким образом, нам требуется хранить только переменную, обозначающую размер кучи, и две-три переменные в процедурах просеивания, при этом никакой рекурсии.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>mo3r, 23.11.04, 22:11, 521110</span><div class='quote '>wormball, heap sort всегда работает за O(n*log(n)) в отличие от быстрой сортировки</div></div><br>
правильно<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>mo3r, 23.11.04, 22:11, 521110</span><div class='quote '>При этом по времени heap sort всегда быстрее quick sort&#39;а</div></div><br>
автор книжки мерял, у него получилось, что медленнее]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=521172</guid>
        <pubDate>Tue, 23 Nov 2004 20:06:05 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=521172</link>
        <description><![CDATA[vk: А может быть, имеется в виду то, что дерево должно быть сбалансированным. То есть, все веточки примерно одинаковой длины. Есть специальные алгоритмы балансировки при добавлении, при них корень действительно потомок иногда встает на место предка.]]></description>
        <author>vk</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=521110</guid>
        <pubDate>Tue, 23 Nov 2004 19:11:40 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=521110</link>
        <description><![CDATA[mo3r: Наверное, имеется в виду то, что потомок справа меньше или равен своего предка, а потомок слева строго меньше. Соответственно при вставке совпадающего элемента он идет направо. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2004-11-23T19:15:50+00:00">23.11.04, 19:15</time></span></span><br>
<strong class='tag-b'>wormball</strong>, heap sort всегда работает за O(n*log(n)) в отличие от быстрой сортировки. При этом по времени heap sort всегда быстрее quick sort&#39;а. Особенно это сказывается на массивах следующего вида: очень много элементов, но диапазон их изменения очень мал. Вот здесь quick sort даже медленне, чем bubble sort. Причем, по памяти quick sort тоже более требователен чем heap sort (quick sort требует O(log(n)) в лучшем случае, O(n) в худшем, heap sort - O(1) памяти в худшем случае).]]></description>
        <author>mo3r</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=520154</guid>
        <pubDate>Tue, 23 Nov 2004 07:37:56 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=520154</link>
        <description><![CDATA[Alto: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '><br>
Сортировка с помощью бинарного дерева - это самая тривиальная сортировка, которая только приходит в голову: когда добавляешь новый элемент, то сравниваешь его с элементом вершины и в зависимости от результата сравнения отсылаешь его либо в левую либо в правую ветку (либо оставляешь вместо бывшего верхнего элемента, а его в свою очередь отправляешь либо в лево либо в право) и т. д. пока он не займет нужное место. В случае равномерно распределенных случайных чисел сложность составляет O(N*Log(N)), в худшем случае сложность O(N^2).<br>
</div></div><br>
<br>
Каким же именно образом происходит сравнение элементов? Другими словами: отчего зависит попадание<br>
потомка либо влево, либо вправо, либо на место предка.<br>
Мне известно, что в бинарном дереве потомок слева должен быть меньше своего предка, а потомок справа - наоборот,<br>
больше предка. Тут условия сравнения вполне понятны. Но при каком условии потомок встает на место предка - вот<br>
вопрос?<br>
 :wall: Разъясните мне пожалуйста, прогу на неделе сдавать надо...]]></description>
        <author>Alto</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92019</guid>
        <pubDate>Tue, 01 Apr 2003 09:50:49 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92019</link>
        <description><![CDATA[S.Yu.Gubanov: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Serega_f1, 28.03.03, 12:34:59</span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;br&#62;void HeapSort(int N) {...</div></ol></div></div></div></div><br>...</div></div><br>Все равно, heap sort и сортировка бинарным деревом - это разные вещи.<br>Теоретически, heap sort должна работать быстрее дерева, поскольку в ней<br>содержится меньше информации.<br>]]></description>
        <author>S.Yu.Gubanov</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92018</guid>
        <pubDate>Fri, 28 Mar 2003 09:34:59 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92018</link>
        <description><![CDATA[Serega_f1: <div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;br&#62;void HeapSort(int N) {&#60;br&#62; int x;&#60;br&#62; int l=(N/2)+1;&#60;br&#62; int r=N;&#60;br&#62; while (l&#62;0) {l--; shift(l,r); }&#60;br&#62; while (r&#62;0) {&#60;br&#62; &nbsp; x=mas[0]; &#60;br&#62; &nbsp; mas[0]=mas[r]; &#60;br&#62; &nbsp; mas[r]=x;&#60;br&#62; &nbsp; r--; shift(l,r);&#60;br&#62; }&#60;br&#62;}&#60;br&#62;&#60;br&#62;void shift(int l,int r) {&#60;br&#62; int x=mas[l];&#60;br&#62; int i=l;&#60;br&#62; int j=2*l;&#60;br&#62; if ((j&#60;r)&amp;&amp;(mas[j]&#60;mas[j+1])) j++;&#60;br&#62; while ((j&#60;=r)&amp;&amp;(x&#60;mas[j])) {&#60;br&#62; &nbsp; mas[i]=mas[j];&#60;br&#62; &nbsp; i=j; &nbsp; &#60;br&#62; &nbsp; j=2*j;&#60;br&#62; &nbsp; if ((j&#60;r)&amp;&amp;(mas[j]&#60;mas[j+1])) j++; &#60;br&#62; }&#60;br&#62; mas[i]=x;&#60;br&#62;}&#60;br&#62;</div></ol></div></div></div></div><br>N - длина массива<br>так вроде]]></description>
        <author>Serega_f1</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92017</guid>
        <pubDate>Fri, 28 Mar 2003 07:38:44 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92017</link>
        <description><![CDATA[S.Yu.Gubanov: При чем тут heap sort? Heap sort это другое, там, конечно, что-то вроде дерева тоже имеется, но в каждый фиксированный момент времени там известен лишь только самый минимальный (или максимальный) элемент, а второй (или предпоследний) элемент не определен. <br><br>Сортировка с помощью бинарного дерева - это самая тривиальная сортировка, которая только приходит в голову: когда добавляешь новый элемент, то сравниваешь его с элементом вершины и в зависимости от результата сравнения отсылаешь его либо в левую либо в правую ветку (либо оставляешь вместо бывшего верхнего элемента, а его в свою очередь отправляешь либо в лево либо в право) и т. д. пока он не займет нужное место. В случае равномерно распределенных случайных чисел сложность составляет O(N*Log(N)), в худшем случае сложность O(N^2).<br><br>Пример<br><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;7&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/ &nbsp; \&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;5 &nbsp; &nbsp; &nbsp;10&#60;br&#62; &nbsp; &nbsp; &nbsp; / \ &nbsp; &nbsp; / \&#60;br&#62; &nbsp; &nbsp; &nbsp;2 &nbsp; 6 &nbsp; 9 &nbsp;12&#60;br&#62;</div></ol></div></div></div></div><br><br>]]></description>
        <author>S.Yu.Gubanov</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92016</guid>
        <pubDate>Thu, 27 Mar 2003 15:53:52 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92016</link>
        <description><![CDATA[wormball: ето касательно так называемого алгоритма сортировки при помощи кучи (heap sort). я в своё время о нём читал, не помню правда, понял или нет, но выяснил одно: по сложности он эквивалентен обычной быстрой сортировке, но работает как правило медленнее. тебе надо поискать heap sort в поисковике или на сайтах, упомянутых в топике &quot;ссылки на алгоритмы и способы их реализации&quot;.]]></description>
        <author>wormball</author>
        <category>Алгоритмы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92015</guid>
        <pubDate>Thu, 27 Mar 2003 01:04:10 +0000</pubDate>
        <title>Сортировка массива при помощи бинарного дерева</title>
        <link>https://forum.sources.ru/index.php?showtopic=9474&amp;view=findpost&amp;p=92015</link>
        <description><![CDATA[Dmitry_K: Как можно отсортировать массив при помощи бинарного дерева?]]></description>
        <author>Dmitry_K</author>
        <category>Алгоритмы</category>
      </item>
	
      </channel>
      </rss>
	