Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
58 / 40 / 41
Регистрация: 26.09.2013
Сообщений: 347
Записей в блоге: 1

Сортировка списка методом простого обмена

27.01.2014, 10:25. Показов 2656. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста. Никак не могу разобраться с динамическими вещами.

Используя представление последовательности чисел в виде линейного
списка, напишите программу, сортировки этой последовательности при
помощи алгоритма простого обмена.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.01.2014, 10:25
Ответы с готовыми решениями:

Сортировка методом простого обмена
Составить программу массива сортирования по убыванию

Отсортировать по убыванию элементы одномерного массива, стоящие на нечетных местах, методом простого обмена
Отсортировать по убыванию элементы одномерного массива, стоящие на нечетных местах, методом простого обмена. с процедурами. заранее...

Сортировка методом простого включения
упорядочите элементы двумерного массива по убыванию модулей элементов строк методом простого включения

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
27.01.2014, 13:52
Имитация сортировки "пузырьком" (он же - алгоритм простого обмена) на списках:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
type
  spis = ^el;
  el  = record
    next: spis;
    data: integer;
  end;
 
// Добавление элемента в конец списка.
// head - "голова" списка (первый элемент), tail - "хвост" (последний элемент)
procedure append(value: integer; var head, tail: spis);
var
  p: spis;
begin
  new(p);
  p^.data := value;
  p^.next := nil;
  
  if head = nil then head := p
  else tail^.next := p;
  tail := p;
end;
 
procedure print(head: spis);
begin
  while head <> nil do
  begin
    write(head^.data:4);
    head := head^.next;
  end;
  writeln;
end;
 
// указатель на n -ый элемент списка
// list - указатель на первый элемент
function find_n(list: spis; n: integer): spis;
begin
  while (list <> nil) and (n > 0) do // просто проходим n элементов от начала
  begin
    list := list^.next; dec(n);
  end;
  find_n := list; // и возвращаем указатель на элемент, находящийся на n-ом месте
end;
 
// Это сам алгоритм "пузырька", то же самое, что для массивов, но у нас ведь список...
procedure BubbleList(var list: spis; n: integer);
var
  i, j, T: Integer;
  p_1, p_2: spis;
begin
  for i := 1 to n do
    for j := n downto i + 1 do
    begin
      // поэтому находим в списке элементы на позициях j - 1 и j, и сравниваем их
      p_1 := find_n(list, pred(j - 1)); p_2 := find_n(list, j - 1);
      // > или < в зависимости от направления
      if p_1^.data > p_2^.data then 
      begin // если предыдущий больше следующего - меняем местами содержимое поля data
        T := p_1^.data;
        p_1^.data := p_2^.data;
        p_2^.data := T;
      end;
    end;
end;
 
var
  h, t: spis;
  X, len: integer;
 
begin
  h := nil; t := nil;
  len := 0;
  repeat
    write('введите число (0 для завершения): '); readln(X);
    if X <> 0 then 
    begin
      Append(X, h, t);
      inc(len);
    end;
  until X = 0;
  print(h);
  
  BubbleList(h, len);
  
  print(h);
end.
1
58 / 40 / 41
Регистрация: 26.09.2013
Сообщений: 347
Записей в блоге: 1
27.01.2014, 13:54  [ТС]
UI, Большое спасибо. Не могли бы вы добавить коментарии в процедурах, а то боюсь, что не разберусь...
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33376 / 21500 / 8236
Регистрация: 22.10.2011
Сообщений: 36,896
Записей в блоге: 11
27.01.2014, 14:06
А чего там комментировать-то? Это ж обычная пузырьковая сортировка, только из-за того, что в списках нет понятия "доступ по индексу", пришлось добавить еще одну функцию, которая получает указатель на любой элемент (по номеру в списке).
0
0 / 0 / 0
Регистрация: 03.04.2014
Сообщений: 53
24.05.2017, 21:01
volvo, А есть ли возможность предусмотреть в данной программе, контроль за размером динамически распределяемой памяти и ее освобождение после выполнения необходимых действий. И если возможно не используя процедуру append.
Допустим начиная с 69 строчки

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
begin
 
writeln('Свободно',MemAvail,' байт');//добавил вывод
 
  h := nil; t := nil;
  len := 0;
  repeat
    write('введите число (0 для завершения): '); readln(X);
    if X <> 0 then 
    begin
      Append(X, h, t);
      inc(len);
    end;
  until X = 0;
 
writeln('Свободно',MemAvail,' байт');//добавил вывод
 
  print(h);
  
  BubbleList(h, len);
  тут незнаю как посчитать ДРП (размер динамически распределяемой памяти) 
  print(h);
writeln('Свободно',MemAvail,' байт');//добавил вывод
end.
Если будет возможность и время, очень рассчитываю на Вашу помощь в написании программы с критериями, что указаны выше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.05.2017, 21:01
Помогаю со студенческими работами здесь

Сортировка линейного списка при помощи алгоритма простого обмена
&quot;Используя представление последовательности чисел в виде линейного списка, напишите программу, сортировки этой последовательности при...

Сортировка методом простого включением
При запуске под Pascal for Windows все работает нормально, но запускаю под DOS-ом и если наименьшее число находится не слева, то оно...

Сортировка модифицированным методом простого выбора
Дана последовательность a1,a2,...,a15. Требуется упорядочить ее по возрастанию абсолютных значений элементов модифицированным методом...

сортировка последовательностипо возрастанию(убыванию) методом простого выбора.
записать программу,выполняющую следующие операции: 1.ввод с клавиатуры числовой последовательности (количество элементов м произвольно,но...

Сортировка матрицы по возрастанию методом обмена с флагом перестановки
Отсортировать матрицу по возрастанию методом обмена с флагом перестановки согласно изображению в чём ошибка? вроде работает, но не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru