Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сортировка по нескольким полям / 13 сообщений из 13, страница 1 из 1
01.02.2019, 13:46
    #39768156
sergq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
Здравствуйте.

Возник такой вопрос. Допустим есть у меня набор данных
Сто строк, 10 колонок.
Отсортировать по первой допустим quicksort не проблема

А вот как потом отсортировать по втрой, третьей, четвёртой ?
С учётом предидущих сортировок?
...
Рейтинг: 0 / 0
01.02.2019, 13:54
    #39768169
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
При сравнении проверяй все четыре колонки. Если первые равны, то сравнить вторые и т.д.
...
Рейтинг: 0 / 0
01.02.2019, 23:26
    #39768563
sergq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
Dima TПри сравнении проверяй все четыре колонки. Если первые равны, то сравнить вторые и т.д.

так вроде как при quicksort на равенство вообще не сравнивают. Или туплю

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure qSortdesc(var A: array of byte; min, max: Integer;desc:boolean);
var i, j, supp, tmp: Integer;
begin
supp:=A[max-((max-min) div 2)]; // 
i:=min; j:=max;
while i<j do
  begin
    while A[i]>supp do
    i:=i+1; // 
    while A[j]<supp do
    j:=j-1; // 
    if i<=j then
      begin
        tmp:=A[j]; A[j]:=A[i]; A[i]:=tmp; //
        i:=i+1; j:=j-1; // 
      end;
  end;
if min<j then qSortdesc(A, min, j,desc);
if i<max then qSortdesc(A, i, max,desc);
end;
...
Рейтинг: 0 / 0
02.02.2019, 00:54
    #39768582
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
Любой из предикатов типа
Код: pascal
1.
A[i]>supp


Можно поставить под инверсию и перевернуть знак на меньше либо равно.
Код: pascal
1.
not A[i]<=supp


Тогда и сравнение будет участвовать. Впрочем на смысл алгоритма это не влияет.

И данный пример - узкий. Он показывает сортировку целых чисел в массиве
а у тебя т.н. "строки и колонки".

Кстати советую уйти от этой терминологии и использовать объект и класс (тип).
А для сравнения нужна функция-компаратор. Которая решает какой объект больше
или меньше или равен по рангу.
...
Рейтинг: 0 / 0
02.02.2019, 00:54
    #39768583
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
sergq,

не сравнивают, но в функции сравнения это никто не запрещает сделать в случае равенства по первой, второй, ... колонке
...
Рейтинг: 0 / 0
02.02.2019, 08:39
    #39768611
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
sergqDima TПри сравнении проверяй все четыре колонки. Если первые равны, то сравнить вторые и т.д.

так вроде как при quicksort на равенство вообще не сравнивают. Или туплю
Обычно функция сортировки в качестве одного из параметров получает функцию-компаратор, где прописывается алгоритм сравнения. Например в С
...
Рейтинг: 0 / 0
02.02.2019, 20:51
    #39768755
sergq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
kealon(Ruslan)sergq,

не сравнивают, но в функции сравнения это никто не запрещает сделать в случае равенства по первой, второй, ... колонке

Это что то из этой оперы?
https://stackoverflow.com/questions/47030279/quick-sort-with-multiple-keys
...
Рейтинг: 0 / 0
02.02.2019, 20:53
    #39768756
sergq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
maytonЛюбой из предикатов типа
Код: pascal
1.
A[i]>supp


Можно поставить под инверсию и перевернуть знак на меньше либо равно.
Код: pascal
1.
not A[i]<=supp


Тогда и сравнение будет участвовать. Впрочем на смысл алгоритма это не влияет.

И данный пример - узкий. Он показывает сортировку целых чисел в массиве
а у тебя т.н. "строки и колонки".

Кстати советую уйти от этой терминологии и использовать объект и класс (тип).
А для сравнения нужна функция-компаратор. Которая решает какой объект больше
или меньше или равен по рангу.

У меня скорее не строки и колонки и пе объект и класс.
У меня скоре raw файл бинарный. Разбитый на блоки (строки) , а внутри блок разбит на «колонки»
...
Рейтинг: 0 / 0
02.02.2019, 21:24
    #39768760
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
sergqmaytonЛюбой из предикатов типа
Код: pascal
1.
A[i]>supp


Можно поставить под инверсию и перевернуть знак на меньше либо равно.
Код: pascal
1.
not A[i]<=supp


Тогда и сравнение будет участвовать. Впрочем на смысл алгоритма это не влияет.

И данный пример - узкий. Он показывает сортировку целых чисел в массиве
а у тебя т.н. "строки и колонки".

Кстати советую уйти от этой терминологии и использовать объект и класс (тип).
А для сравнения нужна функция-компаратор. Которая решает какой объект больше
или меньше или равен по рангу.

У меня скорее не строки и колонки и пе объект и класс.
У меня скоре raw файл бинарный. Разбитый на блоки (строки) , а внутри блок разбит на «колонки»
Ты можешь называть это сепулькой или кандибобером.

Но в форуме программирования, очень продуктивно использовать устоявшуюся терминологию. Поверь мне.
...
Рейтинг: 0 / 0
03.02.2019, 12:25
    #39768860
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
sergqУ меня скорее не строки и колонки и пе объект и класс.
У меня скоре raw файл бинарный. Разбитый на блоки (строки) , а внутри блок разбит на «колонки»
Без разницы что там у тебя. Сначала тебе надо сформулировать правило сравнения двух блоков. Записать в виде функции.
И только после этого сортировать.
...
Рейтинг: 0 / 0
03.02.2019, 13:04
    #39768869
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
Автору надо почитать про современное ООП-программирование в Delphi. Вопросы отпадут ИМХО.
...
Рейтинг: 0 / 0
03.02.2019, 20:31
    #39768978
exp98
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
sergq, а что, лексикографическое сравнени сразу 4-х блоков не проходит? как я понял, они равной длины
...
Рейтинг: 0 / 0
04.02.2019, 08:03
    #39769034
kealon(Ruslan)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сортировка по нескольким полям
sergqkealon(Ruslan)sergq,

не сравнивают, но в функции сравнения это никто не запрещает сделать в случае равенства по первой, второй, ... колонке

Это что то из этой оперы?
https://stackoverflow.com/questions/47030279/quick-sort-with-multiple-keys оно и есть
самый последний ответ из этой темы
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Сортировка по нескольким полям / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]