• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Сортировка массива

Alexey123

Новые
Регистрация
11 Дек 2016
Сообщения
26
Реакции
0
Баллы
0
Сортировка массива

Значит, брожу я по просторам интернета, читаю всякие статейки, и натыкаюсь на статью сортировки массива методом пузырька. И вроде бы все понятно, но не все. Вот код :
Код:
program sort_puzyr{ сортировка массива "пузырьком" по возрастанию };
const
  n = 10; 
var
  a:array[1..n] of integer;
  i,j,buf:integer;
begin
  for i:=1 to n do
    begin
      a[i]:=random(10);
      write(a[i],' ');
    end;
  for i:=1 to n-1 do
    for j:=i+1 to n do 
      if a[i]>a[j] then
        begin
          buf:=a[i];
          a[i]:=a[j];
          a[j]:=buf;
        end;
  writeln;
  writeln('Массив после сортировки пузырьковым методом: ');
  for i:=1 to n do
    write(a[i],' ');
А не понятна мне вот эта строка :
Код:
for i:=1 to n-1 do
for j:=i+1 to n do
Почему n-1? И почему j:=i+1?
А еще эта строка :
Код:
buf:=a[i];
          a[i]:=a[j];
          a[j]:=buf;
Зачем делать эти лишние(на мой взгляд) присваивания?
Буду благодарен за подробный ответ:chtivo:
 
А не понятна мне вот эта строка :
Рекомендую не "бродить по просторам интернета", а заглянуть в мои заметки по методам упорядочения массивов. Там "пузырёк" рассмотрен ну очень подробно. С примером.
Зачем делать эти лишние(на мой взгляд) присваивания?
Уверяю Вас, ничего там лишнего нет!
Давайте разбираться.
Пусть, к примеру, у Вас есть две переменных а и b, которым присвоены значения a=3, b=7. А Вам надо, чтобы стало наоборот, a=7, b=3. Делается это так:
1. Вводим дополнительную переменную, например, buf.
2. Присваиваем ей значение а, т.е. теперь у нас a=3, b=7, buf=3.
3. Переменной a присваиваем значение b, т.е. имеем: a=7, b=7, buf=3.
4. Переменной b присваиваем значение buf, т.е. теперь a=7, b=3, buf=3.
Что и требовалось. Задача решена. И что тут Вы видите "лишнего"? Попробуйте иначе. Я, например, других способов не знаю. А если Вы думаете, что для обмена значениями достаточно написать
a:=b;
b:=a;

то в результате получите a=b=7, поскольку после первого действия тройка будет утрачена навсегда.
:rip3:
 
Для этого надо просто понять алгоритм.
bubbles.preview.png.webp

Суть его в том, что сравниваются два соседних элемента массива и переставляются между собой в случае выполнения заданного условия сортировки. Т.о. "бегать" приходится по всему массиву столько раз, сколько необходимо для "всплытия" каждого пузырька. В Вашем примере кол-во проходов выбрано более оптимально.
Вывод: метод не оптимальный, но простой для понимания и достаточно легко реализуется на любом языке программирования.

P.s. Упс! Игоревич уже меня опередил...
 
Последнее редактирование:
А зачем в цикле добавлять единицу? Вообще, мне не совсем понятно, за что отвечают переменные i и j ? Да и зачем нам делать двойной цикл, массив то одномерный ?
P.S. Да, да, вопросы тупые, я знаю, можно обойтись без упоминания моего IQ, но мне вообще ничего не понятно. Хотя суть с буфером обмена я понял, спасибо Vladimir S!
 
Вообще, мне не совсем понятно, за что отвечают переменные i и j ?
А Вы разберитесь с понятием "цикл" в программировании, причем вне зависимости от языка. Глядишь - и понятно станет. Переписывать же сюда страницы учебников и обучающих сайтов смысла не вижу.
Да и зачем нам делать двойной цикл, массив то одномерный ?
Это что, троллинг такой? Зачем меня цитировать?
 
А Вы разберитесь с понятием "цикл" в программировании, причем вне зависимости от языка. Глядишь - и понятно станет.
Действительно стало понятней! Кто же вы такой, как не обращаюсь, всегда есть ответ! Отличный форум, приятные люди, готовые помочь :wo:
P.S. Не увидел сразу вашу цитату, проститеtehno015
 
Назад
Сверху