Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Индексная сортировка линейным методом

Автор: angry_one 27.05.2007 2:00

Прошу в общих чертах описать, что должно происходить при таком варианте сортировки. Лекцию я видимо по этой теме пропустил, а прогу писать надо smile.gif То есть именно не кусок кода, а чисто теоретически описать эту страшгую вещь. Все-таки писать прогу самому хочется.

Автор: angry_one 27.05.2007 2:42

прошу прощения за создание этой темы. Нашел все, что мне нужно в FAQ'e.

Автор: angry_one 27.05.2007 3:09

так, стадия 3, скажите, это оно:

Создается массив записей и сортируется пузырьком по полю, содержащему скажем грузоподъемность трактора.
Это и есть "Индексная сортировка линейным методом"?

Автор: volvo 27.05.2007 3:24

Не совсем... Индексная сортировка - это когда сортируется не сам массив данных (он как раз остается в неприкосновенности), а массив индексов... Т.е., если исходный массив имеет вид A = <1, 3, 5, 2, 4>
и соответственно, индексный массив в начале - ix = <1, 2, 3, 4, 5> (просто индексы от 1 до длины_массива), то в результате сортировки массив данных неизменен, а массив индексов примет вид: ix = <1, 4, 2, 5, 3>, то есть если распечатать значения A[ix[i]], то они будут отсортированы по возрастанию...

Автор: Гость 27.05.2007 3:31

о, кажется понял. Спасибо.

Автор: Гость 28.05.2007 1:19

ребят, еще один вопрос возник:
можно ли задать формат вывода на экран чисел ЦЕЛОГО типа, аналогичным образом, каким он происходит с вещественными(:5:2 условно)? Нужно в таблице вывести число от 0 до 999, но границы таблицы меняются из-за того, что разное разное количество символов под разные числа. Было бы замечательно, если бы можно было выделить под это число 3 знака и они бы уже заполнялись, не двигая границы таблицы

Автор: Гость 28.05.2007 1:32

кстати вот моя реализация сабжевого вопроса темы:

For j:=1 to i do{заполнение массива индексов}
mInd[j]:=j;{}
For j:=1 to i do{цикл изменения массива индексов в соответствии с требуемым}
For k:=1 to i do begin
If tplane[mind[j]].pass>tplane[mind[k]].pass then
begin
buf:=mind[j];
mind[j]:=mind[k];
mind[k]:=buf;
end;
end;

Автор: Ozzя 29.05.2007 11:44

Цитата(Гость @ 27.05.2007 22:19) *

ребят, еще один вопрос возник:
можно ли задать формат вывода на экран чисел ЦЕЛОГО типа, аналогичным образом, каким он происходит с вещественными(:5:2 условно)? Нужно в таблице вывести число от 0 до 999, но границы таблицы меняются из-за того, что разное разное количество символов под разные числа. Было бы замечательно, если бы можно было выделить под это число 3 знака и они бы уже заполнялись, не двигая границы таблицы

Write (i:3);