<?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=415471&amp;view=findpost&amp;p=3807849</guid>
        <pubDate>Thu, 22 Aug 2019 12:49:28 +0000</pubDate>
        <title>Сортировка</title>
        <link>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807849</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415471&view=findpost&p=3807797'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-08-22T07:47:23+00:00">22.08.19, 07:47</time></span><div class='quote '>правда появился ожидаемый недостаток после 1 идет 10 ...</div></div><br>
надо всего лишь изменить алгоритм сравнения строк. <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-08-22T16:19:44+03:00">22.08.19, 13:19</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415471&view=findpost&p=3807848'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-08-22T12:41:11+00:00">22.08.19, 12:41</time></span><div class='quote '>1)<br>
Прочитал про сортировку пузырьком. Решил тоже усовершенствовать.</div></div><br>
В Сети легко можно найти описание и исходники<br>
широко используемых алгоритмов сортировки:<br>
- пузырьковая сортировка<br>
- сортировка выбором<br>
- сортировка вставками<br>
- шейкерная сортировка (разновидность пузырьковой сортировки)<br>
- сортировка Шелла<br>
- быстрая сортировка<br>
Наверняка подберёшь что-нибудь подходящее.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807788</guid>
        <pubDate>Thu, 22 Aug 2019 06:40:41 +0000</pubDate>
        <title>Сортировка</title>
        <link>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807788</link>
        <description><![CDATA[Олег М: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415471&view=findpost&p=3807744'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>E.A. &#064; <time class="tag-quote__quoted-time" datetime="2019-08-21T16:34:32+00:00">21.08.19, 16:34</time></span><div class='quote '>Данные в таблице заданы массивом символов data[50][500][256], где максимально возможные значения : 50 столбцов x 500 строк x 256 символлов в ячейке.</div></div><br>
А здесь разве не вот такой массив должен быть - data[500][50][256]? Т.е. 500 строк, каждая из которых состоит из 50 х 256 символов. <br>
Ну и сортировать сам этот массив смысла нет - нужно сделать ещё один - массив указателей или индексов строк и сортировать его, и отображать в таблице тоже его.]]></description>
        <author>Олег М</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807770</guid>
        <pubDate>Wed, 21 Aug 2019 19:51:14 +0000</pubDate>
        <title>Сортировка</title>
        <link>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807770</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=415471&view=findpost&p=3807752'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Славян &#064; <time class="tag-quote__quoted-time" datetime="2019-08-21T17:33:34+00:00">21.08.19, 17:33</time></span><div class='quote '>Ай, виноват, так только кликнутая колонка и отсортируется.</div></div><br>
Как же это произойдёт ?<br>
Любая сортировка делает сравнение и &quot;swap&quot;.<br>
(Отличия алгоритмов - это, в основном, отличия<br>
в алгоритмах выбора индексов массива для манипулирования объектами)<br>
Данная функция делает swap для 32-х битных<br>
значений. Но ни как не строк.<br>
---<br>
Эту функцию можно было бы удобно использовать,<br>
если бы кроме пользовательской функции сравнения<br>
она вызывала пользовательскую функцию &quot;swap&quot;.<br>
---<br>
Теоретически возможен вариант - составим массив<br>
указателей на строки. Тогда можно отсортировать строки<br>
перестановкой указателей.<br>
Но в данном случае надо также переставлять строки в других<br>
столбцах. Поскольку совокупность содержимого ячеек одной строки таблицы<br>
это один объект сортировки.<br>
---<br>
Тогда получается как-то так:<br>
1. Изначальный массив с данными не будем изменять, результат будет в аналогичном массиве.<br>
   Заполняем его читая таблицу.<br>
2. Составляем массив [500] указателей на строки выбранного для сортировки столбца.<br>
3. Сортируем указатели указанной процедурой<br>
4. Потом ищем каждый из указателей отсортированного массива указателей в изначальном<br>
   массиве с выбранным столбцом. В результате получим два индекса - старого размещения и нового.<br>
5. Найденный указатель покажет нам, с какого и на какое место должна быть пернесена информация<br>
   всего ряда ячеек (всех столбцов). <br>
   Копируем все строки по всем столбцам из изначального массива со старым индексом<br>
   в массив результата с новым индексом.<br>
6. Массив результата выведем в таблицу.]]></description>
        <author>ЫукпШ</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807752</guid>
        <pubDate>Wed, 21 Aug 2019 17:33:34 +0000</pubDate>
        <title>Сортировка</title>
        <link>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807752</link>
        <description><![CDATA[Славян: В вашем случае, <strong class='tag-b'>E.A.</strong>, будет как-то так:<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">char data[50][500][256];</div><div class="code_line">int sortCol=2; // колонка</div><div class="code_line">int compare( const void *a, const void *b)</div><div class="code_line">{</div><div class="code_line">&nbsp;&nbsp;return strcmp( (char*)a, (char*)b );</div><div class="code_line">}</div><div class="code_line">...</div><div class="code_line">qsort( (void*)(data[sortCol]), 500, 256, compare);</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-08-21T17:36:24+00:00">21.08.19, 17:36</time></span></span><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">qsort( (void*)(&amp;data[sortCol][0][0]), 500, 256, compare);</div></ol></div></div></div></div> <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-08-21T17:38:43+00:00">21.08.19, 17:38</time></span></span><br>
Ай, виноват, так только кликнутая колонка и отсортируется. Пардон-с. :blush: <br>
<br>
<span class="tag-color tag-color-named" data-value="mergepost" style="color: mergepost"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2019-08-21T17:49:11+00:00">21.08.19, 17:49</time></span></span><br>
Тогда б я посоветовал взять исходник qsort&#39;а (благо она крохотная) и там операцию перемещения пары элементов заменить на нужное перемещение в вашей базе, <strong class='tag-b'>E.A.</strong>, раз уж она имеет такое строение строк в памяти. Будет архибыстро и весьма лаконично.<br>
Но &quot;костылёк&quot; с ГОСТовским qsort&#39;ом, бесспорно, можно и помучать; но надо колдовать... (чую, что надо бы сначала индексы посортировать, а потом уж базой заняться).]]></description>
        <author>Славян</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807745</guid>
        <pubDate>Wed, 21 Aug 2019 16:59:09 +0000</pubDate>
        <title>Сортировка</title>
        <link>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807745</link>
        <description><![CDATA[JoeUser: <strong class='tag-b'>E.A.</strong>, по сути - тут все элементарно, для 500 строк для qsort переполнения стека и не близко не будет.<br>
Вопрос в другом, в &quot;дизайне&quot; массива. Нужно правильно определить порядок, а именно - первое измерение это строки, второе - это столбцы, и последнее символы в столбце. В таком вот случае в функции qsort будут передаваться строки для сравнения в функцию сравнения. Соответственно, для реализации сортировки по столбцу в этой функции сравнения нужно сравнивать данные нужного столбца (поля). Все решается приведением типов в функции сравнения и применении собственно операции сравнения двух строк.]]></description>
        <author>JoeUser</author>
        <category>C/C++: Прочее</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807744</guid>
        <pubDate>Wed, 21 Aug 2019 16:34:32 +0000</pubDate>
        <title>Сортировка</title>
        <link>https://forum.sources.ru/index.php?showtopic=415471&amp;view=findpost&amp;p=3807744</link>
        <description><![CDATA[E.A.: Есть таблица, при клике по заголовку столбца должна происходить сортировка данных по строкам (например как в проводнике).<br>
<br>
Данные в таблице заданы массивом символов data[50][500][256], где максимально возможные значения : 50 столбцов x 500 строк x 256 символлов в ячейке.<br>
<br>
Вопрос : Как отсортировать таблицу ?]]></description>
        <author>E.A.</author>
        <category>C/C++: Прочее</category>
      </item>
	
      </channel>
      </rss>
	