<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0</id>
		<title>Быстрая сортировка - История изменений</title>
		<link rel="self" type="application/atom+xml" href="https://lib.custis.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0"/>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;action=history"/>
		<updated>2026-04-28T08:47:44Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.26.4</generator>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=27270&amp;oldid=prev</id>
		<title>StasFomin: Содержимое страницы заменено на «#REDIRECT discopal:{{PAGENAME}}»</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=27270&amp;oldid=prev"/>
				<updated>2011-06-13T17:43:15Z</updated>
		
		<summary type="html">&lt;p&gt;Содержимое страницы заменено на «#REDIRECT [[discopal:{{PAGENAME}}]]»&lt;/p&gt;
&lt;a href=&quot;https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;amp;diff=27270&amp;amp;oldid=9969&quot;&gt;Внесённые изменения&lt;/a&gt;</summary>
		<author><name>StasFomin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9969&amp;oldid=prev</id>
		<title>WikiSysop: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9969&amp;oldid=prev"/>
				<updated>2008-10-23T16:47:57Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;tr style='vertical-align: top;' lang='ru'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 16:47, 23 октября 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;' lang='ru'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>WikiSysop</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9968&amp;oldid=prev</id>
		<title>StasFomin: обновление данных</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9968&amp;oldid=prev"/>
				<updated>2008-10-22T15:39:05Z</updated>
		
		<summary type="html">&lt;p&gt;обновление данных&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;tr style='vertical-align: top;' lang='ru'&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='2' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 15:39, 22 октября 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Строка 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Алгоритм быстрой сортировки (''QuickSort'') является популярным алгоритмом для [[сортировка|сортировки]], несмотря на то, что в худшем случае (на некоторых входных массивах) использует время &amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;\Omega(n^2)&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;, что, например, хуже, чем сложность в наихудшем случае алгоритма [[Сортировка слиянием]]. Дело в том, что анализ «в среднем» и опыт реального использования показали его эффективность. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Алгоритм быстрой сортировки (''QuickSort'') является популярным алгоритмом для [[сортировка|сортировки]], несмотря на то, что в худшем случае (на некоторых входных массивах) использует время &amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;\Omega(n^2)&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;, что, например, хуже, чем сложность в наихудшем случае алгоритма [[Сортировка слиянием]]. Дело в том, что анализ «в среднем» и опыт реального использования показали его эффективность. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l90&quot; &gt;Строка 90:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 90:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; Sorted:&amp;#160; &amp;#160; [1, 2, 3, 4, 5, 6, 7]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; Sorted:&amp;#160; &amp;#160; [1, 2, 3, 4, 5, 6, 7]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Видно, что на каждой рекурсии, сортируемый интервал уменьшается только на один осевой элемент. Таким образом, алгоритм на «плохих» входных данных выполняет &amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;\Omega(N)&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt; рекурсий, а общее количество операций (с учетом операций в процедуре «partition» ) будет &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Видно, что на каждой рекурсии, сортируемый интервал уменьшается только на один осевой элемент. Таким образом, алгоритм на «плохих» входных данных выполняет &amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;\Omega(N)&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt; рекурсий, а общее количество операций (с учетом операций в процедуре «partition» ) будет &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;\Omega(\sum_{i=1}^{N} i)=\Omega(n^2)&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;\Omega(\sum_{i=1}^{N} i)=\Omega(n^2)&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Осталось выяснить, часто ли встречаются наихудшие случаи на множестве входных данных. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Осталось выяснить, часто ли встречаются наихудшие случаи на множестве входных данных. &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l97&quot; &gt;Строка 97:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Строка 97:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Допустим, входные данные случайны, и их распределение таково, &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Допустим, входные данные случайны, и их распределение таково, &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;что в каждом интервале длины ''N'' попадаемом в процедуру «partition», первый элемент с равной вероятностью может быть ''k''-тым (''1 &amp;lt;= k &amp;lt;= N''), по величине, &amp;quot;разбивая&amp;quot;, тем самым входной интервал на интервалы длины ''k-1'' и ''N-k-1''. Тогда можно записать следующую рекурсивную оценку матожидания сложности алгоритма:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;что в каждом интервале длины ''N'' попадаемом в процедуру «partition», первый элемент с равной вероятностью может быть ''k''-тым (''1 &amp;lt;= k &amp;lt;= N''), по величине, &amp;quot;разбивая&amp;quot;, тем самым входной интервал на интервалы длины ''k-1'' и ''N-k-1''. Тогда можно записать следующую рекурсивную оценку матожидания сложности алгоритма:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; T(N) \leq&amp;#160; O(N)+\frac{1}{N}(\sum_{k=1}^{N} T(k-1)+T(N-k-1) \leq O(N)+\frac{2}{N}\sum_{k=1}^{N-1} T(k)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160; T(N) \leq&amp;#160; O(N)+\frac{1}{N}(\sum_{k=1}^{N} T(k-1)+T(N-k-1) \leq O(N)+\frac{2}{N}\sum_{k=1}^{N-1} T(k)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Анализ показывает, что при этом предположении (достаточно равномерном распределении входных данных), справедливо матожидание времени работы, асимптотически оптимальное минимальной сложности сортировки:&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;Анализ показывает, что при этом предположении (достаточно равномерном распределении входных данных), справедливо матожидание времени работы, асимптотически оптимальное минимальной сложности сортировки:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; T(N)=O(N\log N)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;#160;&amp;#160; T(N)=O(N\log N)&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;math&lt;/del&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;m&lt;/ins&gt;&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>StasFomin</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9793&amp;oldid=prev</id>
		<title>WikiSysop: 1 версия</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9793&amp;oldid=prev"/>
				<updated>2008-08-04T09:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;tr style='vertical-align: top;' lang='ru'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 09:55, 4 августа 2008&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;' class='diff-multi' lang='ru'&gt;(не показана 1 промежуточная версия 1 участника)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;' lang='ru'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>WikiSysop</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=2801&amp;oldid=prev</id>
		<title>BenderBot: реплицировано из внутренней CustisWiki</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=2801&amp;oldid=prev"/>
				<updated>2005-10-17T17:15:17Z</updated>
		
		<summary type="html">&lt;p&gt;реплицировано из внутренней CustisWiki&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Алгоритм быстрой сортировки (''QuickSort'') является популярным алгоритмом для [[сортировка|сортировки]], несмотря на то, что в худшем случае (на некоторых входных массивах) использует время &amp;lt;math&amp;gt;\Omega(n^2)&amp;lt;/math&amp;gt;, что, например, хуже, чем сложность в наихудшем случае алгоритма [[Сортировка слиянием]]. Дело в том, что анализ «в среднем» и опыт реального использования показали его эффективность. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Быстрая сортировка с детерминированным выбором оси ==&lt;br /&gt;
&lt;br /&gt;
Ключевая идея алгоритма заключается в процедуре «partition», которая за линейное время от размера массива, осуществляет такую перестановку элементов, относительно некоторой «оси» — заданного значения, равного одному из значений сортируемого интервала массива, что переставленный массив состоит из трех интервалов, идущих по порядку:&lt;br /&gt;
&lt;br /&gt;
# Элементы меньшие «оси»&lt;br /&gt;
# Элементы равные «оси»&lt;br /&gt;
# Элементы большие «оси»&lt;br /&gt;
&lt;br /&gt;
Первый и последний из упомянутых интервалов могут быть неупорядоченными, &lt;br /&gt;
поэтому далее, они рекурсивно сортируются процедурой «quicksort_interval». &lt;br /&gt;
&lt;br /&gt;
Реализация на [[Python]] (и пример работы) алгоритма «Быстрая сортировка с детерминированным выбором оси»:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
 def quicksort(A):&lt;br /&gt;
    &lt;br /&gt;
    def swap(i,j): # Перестановка i-го и j-го элементов массива A&lt;br /&gt;
        temp = A[i]; A[i] = A[j]; A[j] = temp&lt;br /&gt;
&lt;br /&gt;
    #Перестановка элементов в интервале [left:right) массива А, &lt;br /&gt;
    # таким образом, что, возникают три интервала:&lt;br /&gt;
    #  в первой части массива все элементы &amp;lt; осевого значения pivotValue &lt;br /&gt;
    #  а во второй = осевому значению.&lt;br /&gt;
    #  а во третьей &amp;gt; осевого значения.&lt;br /&gt;
    def partition(left, right, pivotValue):           &lt;br /&gt;
        print funcname() ,A[left:right], pivotValue,  &lt;br /&gt;
        indexLow = i = left             # Нижний и текущий индексы                        &lt;br /&gt;
        indexHigh = right-1             # Верхний индекс&lt;br /&gt;
        while i &amp;lt;= indexHigh:           # Пока есть область не просмотренных элементов.&lt;br /&gt;
            if A[i] &amp;lt; pivotValue:       # Если элемент меньше оси&lt;br /&gt;
                swap(i,indexLow)        # гоним его в начало интервала&lt;br /&gt;
                indexLow = indexLow + 1 # сужаем область слева&lt;br /&gt;
                i = i + 1&lt;br /&gt;
            elif A[i] &amp;gt; pivotValue:     # Если элемент больше оси &lt;br /&gt;
                swap(i,indexHigh)       # гоним его в конец интервала&lt;br /&gt;
                indexHigh = indexHigh - 1 # сужаем область справа&lt;br /&gt;
            else:                       # A[i]=pivotValue&lt;br /&gt;
                i = i + 1               # сужаем область слева&lt;br /&gt;
        print &amp;quot;-&amp;gt;&amp;quot;, A[left:indexLow],A[indexLow:indexHigh+1],A[indexHigh+1:right]  &lt;br /&gt;
        return (indexLow,indexHigh)&lt;br /&gt;
&lt;br /&gt;
    def quicksort_interval(left, right):&lt;br /&gt;
     if right &amp;gt; left+1: # Если в интервале [left:right) хотя бы два элемента&lt;br /&gt;
         print funcname(), A[left:right]&lt;br /&gt;
         (indexLow,indexHigh) = partition(left, right, A[left])&lt;br /&gt;
         quicksort_interval(left, indexLow)&lt;br /&gt;
         quicksort_interval(indexHigh+1, right)&lt;br /&gt;
&lt;br /&gt;
    quicksort_interval(0, len(A))&lt;br /&gt;
    return A&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Sorting:   [3, 1, 4, 1, 5, 9, 2, 6, 3, 5, 8, 7]&lt;br /&gt;
 quicksort_interval: [3, 1, 4, 1, 5, 9, 2, 6, 3, 5, 8, 7]&lt;br /&gt;
          partition: [3, 1, 4, 1, 5, 9, 2, 6, 3, 5, 8, 7] 3 -&amp;gt; [1, 1, 2] [3, 3] [9, 6, 5, 5, 8, 7, 4]&lt;br /&gt;
 quicksort_interval: [1, 1, 2]&lt;br /&gt;
          partition: [1, 1, 2] 1 -&amp;gt; [] [1, 1] [2]&lt;br /&gt;
 quicksort_interval: [9, 6, 5, 5, 8, 7, 4]&lt;br /&gt;
          partition: [9, 6, 5, 5, 8, 7, 4] 9 -&amp;gt; [6, 5, 5, 8, 7, 4] [9] []&lt;br /&gt;
 quicksort_interval: [6, 5, 5, 8, 7, 4]&lt;br /&gt;
          partition: [6, 5, 5, 8, 7, 4] 6 -&amp;gt; [5, 5, 4] [6] [7, 8]&lt;br /&gt;
 quicksort_interval: [5, 5, 4]&lt;br /&gt;
          partition: [5, 5, 4] 5 -&amp;gt; [4] [5, 5] []&lt;br /&gt;
 quicksort_interval: [7, 8]&lt;br /&gt;
          partition: [7, 8] 7 -&amp;gt; [] [7] [8]&lt;br /&gt;
 Sorted:    [1, 1, 2, 3, 3, 4, 5, 5, 6, 7, 8, 9]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Эффективность алгоритма существенно зависит от выбора «оси». Например, если назначать «осью» значение, которое больше или меньше всех элементов, то алгоритм вовсе не будет работать — разбиение никак не будет уменьшать сортируемый интервал и алгоритм зациклиться. &lt;br /&gt;
&lt;br /&gt;
В представленном выше алгоритме «осью» назначается первый элемент в разбиваемом интервале. Для некоторых последовательностей, это может приводить к неоптимальному поведению, когда при разбиении, один из крайних интервалов сильно меньше другого, или вовсе пустой.&lt;br /&gt;
Например, такой «плохой» входной последовательностью будет следующая:&lt;br /&gt;
&lt;br /&gt;
 Sorting:   [1, 6, 2, 5, 3, 7, 4]&lt;br /&gt;
 quicksort_interval: [1, 6, 2, 5, 3, 7, 4]&lt;br /&gt;
          partition: [1, 6, 2, 5, 3, 7, 4] 1 -&amp;gt; [] [1] [2, 5, 3, 7, 4, 6]&lt;br /&gt;
 quicksort_interval: [2, 5, 3, 7, 4, 6]&lt;br /&gt;
          partition: [2, 5, 3, 7, 4, 6] 2 -&amp;gt; [] [2] [3, 7, 4, 6, 5]&lt;br /&gt;
 quicksort_interval: [3, 7, 4, 6, 5]&lt;br /&gt;
          partition: [3, 7, 4, 6, 5] 3 -&amp;gt; [] [3] [4, 6, 5, 7]&lt;br /&gt;
 quicksort_interval: [4, 6, 5, 7]&lt;br /&gt;
          partition: [4, 6, 5, 7] 4 -&amp;gt; [] [4] [5, 7, 6]&lt;br /&gt;
 quicksort_interval: [5, 7, 6]&lt;br /&gt;
          partition: [5, 7, 6] 5 -&amp;gt; [] [5] [6, 7]&lt;br /&gt;
 quicksort_interval: [6, 7]&lt;br /&gt;
          partition: [6, 7] 6 -&amp;gt; [] [6] [7]&lt;br /&gt;
 Sorted:    [1, 2, 3, 4, 5, 6, 7]&lt;br /&gt;
&lt;br /&gt;
Видно, что на каждой рекурсии, сортируемый интервал уменьшается только на один осевой элемент. Таким образом, алгоритм на «плохих» входных данных выполняет &amp;lt;math&amp;gt;\Omega(N)&amp;lt;/math&amp;gt; рекурсий, а общее количество операций (с учетом операций в процедуре «partition» ) будет &lt;br /&gt;
&amp;lt;math&amp;gt;\Omega(\sum_{i=1}^{N} i)=\Omega(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Осталось выяснить, часто ли встречаются наихудшие случаи на множестве входных данных. &lt;br /&gt;
&lt;br /&gt;
Допустим, входные данные случайны, и их распределение таково, &lt;br /&gt;
что в каждом интервале длины ''N'' попадаемом в процедуру «partition», первый элемент с равной вероятностью может быть ''k''-тым (''1 &amp;lt;= k &amp;lt;= N''), по величине, &amp;quot;разбивая&amp;quot;, тем самым входной интервал на интервалы длины ''k-1'' и ''N-k-1''. Тогда можно записать следующую рекурсивную оценку матожидания сложности алгоритма:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
 T(N) \leq  O(N)+\frac{1}{N}(\sum_{k=1}^{N} T(k-1)+T(N-k-1) \leq O(N)+\frac{2}{N}\sum_{k=1}^{N-1} T(k)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Анализ показывает, что при этом предположении (достаточно равномерном распределении входных данных), справедливо матожидание времени работы, асимптотически оптимальное минимальной сложности сортировки:&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
  T(N)=O(N\log N)&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Быстрая сортировка с вероятностным выбором оси ==&lt;br /&gt;
&lt;br /&gt;
К сожалению, допущенное в предыдущем разделе предположение о равномерности распределения «осей» относительно интервалов, может не встречаться на практике. Например, есть вариации детерминированного алгоритма, для которых «плохими» будут уже отсортированные (или почти отсортированные) последовательности, а таковые часто встречаются в реальных задачах. В таких случаях, когда нельзя «сделать случайными» входные данные, можно внести «элемент случайности» непосредственно в сам алгоритм. В частности, чтобы сохранилась оптимальная оценка матожидания, достаточно сделать вероятностным выбор осевого элемента из разделяемого интервала.&lt;br /&gt;
&lt;br /&gt;
Вероятностный алгоритм отличается от детерминированного, только строчкой, где задается выбор вероятностный выбор осевого элемента, однако, как мы увидели, это дает ему возможность «избегать потерь» на входных данных, которые были «наихудшими» для детерминированного алгоритма, и достигнуть оценки матожидания времени работы ''O(N log N)'', вне зависимости от входных данных.&lt;br /&gt;
&lt;br /&gt;
Реализация на [[Python]] (и пример работы) алгоритма «Быстрая сортировка с вероятностным выбором оси»:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code-python&amp;gt;&lt;br /&gt;
 def quicksort(A):&lt;br /&gt;
    &lt;br /&gt;
    def swap(i,j): # Перестановка i-го и j-го элементов массива A&lt;br /&gt;
        temp = A[i]; A[i] = A[j]; A[j] = temp&lt;br /&gt;
&lt;br /&gt;
    #Перестановка элементов в интервале [left:right) массива А, &lt;br /&gt;
    # таким образом, что, возникают три интервала:&lt;br /&gt;
    #  в первой части массива все элементы &amp;lt; осевого значения pivotValue &lt;br /&gt;
    #  а во второй = осевому значению.&lt;br /&gt;
    #  а во третьей &amp;gt; осевого значения.&lt;br /&gt;
    def partition(left, right, pivotValue):           &lt;br /&gt;
        print funcname() ,A[left:right], pivotValue,  &lt;br /&gt;
        indexLow = i = left             # Нижний и текущий индексы                        &lt;br /&gt;
        indexHigh = right-1             # Верхний индекс&lt;br /&gt;
        while i &amp;lt;= indexHigh:           # Пока есть область не просмотренных элементов.&lt;br /&gt;
            if A[i] &amp;lt; pivotValue:       # Если элемент меньше оси&lt;br /&gt;
                swap(i,indexLow)        # гоним его в начало интервала&lt;br /&gt;
                indexLow = indexLow + 1 # сужаем область слева&lt;br /&gt;
                i = i + 1&lt;br /&gt;
            elif A[i] &amp;gt; pivotValue:     # Если элемент больше оси &lt;br /&gt;
                swap(i,indexHigh)       # гоним его в конец интервала&lt;br /&gt;
                indexHigh = indexHigh - 1 # сужаем область справа&lt;br /&gt;
            else:                       # A[i]=pivotValue&lt;br /&gt;
                i = i + 1               # сужаем область слева&lt;br /&gt;
        print &amp;quot;-&amp;gt;&amp;quot;, A[left:indexLow],A[indexLow:indexHigh+1],A[indexHigh+1:right]  &lt;br /&gt;
        return (indexLow,indexHigh)&lt;br /&gt;
&lt;br /&gt;
    def quicksort_interval(left, right):&lt;br /&gt;
     if right &amp;gt; left+1: # Если в интервале [left:right) хотя бы два элемента&lt;br /&gt;
         print funcname(), A[left:right]&lt;br /&gt;
         (indexLow,indexHigh) = partition(left, right, A[RandomSource.randrange(left, right)]) &lt;br /&gt;
         quicksort_interval(left, indexLow)&lt;br /&gt;
         quicksort_interval(indexHigh+1, right)&lt;br /&gt;
&lt;br /&gt;
    RandomSource = random.Random(6666) # Инициализируем генератор случайных чисел.&lt;br /&gt;
    quicksort_interval(0, len(A))&lt;br /&gt;
    return A&lt;br /&gt;
&amp;lt;/code-python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Sorting:   [1, 6, 2, 5, 3, 7, 4]&lt;br /&gt;
 quicksort_interval: [1, 6, 2, 5, 3, 7, 4]&lt;br /&gt;
          partition: [1, 6, 2, 5, 3, 7, 4] 6 -&amp;gt; [1, 2, 5, 3, 4] [6] [7]&lt;br /&gt;
 quicksort_interval: [1, 2, 5, 3, 4]&lt;br /&gt;
          partition: [1, 2, 5, 3, 4] 2 -&amp;gt; [1] [2] [3, 4, 5]&lt;br /&gt;
 quicksort_interval: [3, 4, 5]&lt;br /&gt;
          partition: [3, 4, 5] 4 -&amp;gt; [3] [4] [5]&lt;br /&gt;
 Sorted:    [1, 2, 3, 4, 5, 6, 7]&lt;br /&gt;
== Реализация на pl/sql ==&lt;br /&gt;
[[Участник:Mikle Zaborov|Mikle Zaborov]] 12:34, 17 Oct 2005 (MSD)&lt;br /&gt;
&amp;lt;code-oracle8&amp;gt;&lt;br /&gt;
  _public_procedure({quick_sort},{&lt;br /&gt;
      _param({at_arr},    {IN OUT NOCOPY pk_cmn.TNumberArray},, {массив чисел})&lt;br /&gt;
        },{Отсортировать массив быстрой сортировкой},&lt;br /&gt;
      {&lt;br /&gt;
      AS&lt;br /&gt;
        PROCEDURE swap(i INTEGER,j INTEGER)&lt;br /&gt;
        AS&lt;br /&gt;
          l Integer;&lt;br /&gt;
        BEGIN&lt;br /&gt;
           l:=at_arr(i);&lt;br /&gt;
           at_arr(i):=at_arr(j);&lt;br /&gt;
           at_arr(j):=l;&lt;br /&gt;
        END;&lt;br /&gt;
        PROCEDURE QuickSort(a_Lo INTEGER,a_Hi INTEGER)&lt;br /&gt;
        AS&lt;br /&gt;
          Lo    INTEGER; &lt;br /&gt;
          Hi    INTEGER; &lt;br /&gt;
          Mid   INTEGER; &lt;br /&gt;
        BEGIN&lt;br /&gt;
            Lo := a_Lo;&lt;br /&gt;
            Hi := a_Hi;&lt;br /&gt;
            Mid := at_arr(TRUNC((Lo + Hi)/2));&lt;br /&gt;
            LOOP&lt;br /&gt;
              WHILE at_arr(Lo) &amp;lt; Mid LOOP Lo:=Lo+1; END LOOP;&lt;br /&gt;
              WHILE at_arr(Hi) &amp;gt; Mid LOOP Hi:=Hi-1;  END LOOP;&lt;br /&gt;
              IF Lo &amp;lt;= Hi THEN&lt;br /&gt;
                Swap(Lo, Hi);&lt;br /&gt;
                Lo:=Lo+1;&lt;br /&gt;
                Hi:=Hi-1;&lt;br /&gt;
              END IF;&lt;br /&gt;
            EXIT WHEN Lo &amp;gt; Hi;&lt;br /&gt;
            END LOOP;&lt;br /&gt;
            if Hi &amp;gt; a_Lo then QuickSort(a_Lo, Hi); END IF;&lt;br /&gt;
            if Lo &amp;lt; a_Hi then QuickSort(Lo, a_Hi); END IF;&lt;br /&gt;
        END;&lt;br /&gt;
      BEGIN&lt;br /&gt;
       QuickSort(at_arr.first,at_arr.last);&lt;br /&gt;
      END;&lt;br /&gt;
      },{})&lt;br /&gt;
&amp;lt;/code-oracle8&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Алгоритмы]]&lt;br /&gt;
{{replicate-from-custiswiki-to-lib}}&lt;/div&gt;</summary>
		<author><name>BenderBot</name></author>	</entry>

	<entry>
		<id>https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9792&amp;oldid=prev</id>
		<title>Mikle Zaborov в 08:34, 17 октября 2005</title>
		<link rel="alternate" type="text/html" href="https://lib.custis.ru/index.php?title=%D0%91%D1%8B%D1%81%D1%82%D1%80%D0%B0%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=9792&amp;oldid=prev"/>
				<updated>2005-10-17T08:34:04Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;tr style='vertical-align: top;' lang='ru'&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan='1' style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 08:34, 17 октября 2005&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan='2' style='text-align: center;' lang='ru'&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Mikle Zaborov</name></author>	</entry>

	</feed>