Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 25.02.2017, 15:20   #1 (permalink)
Alexey123
Member
 
Регистрация: 11.12.2016
Сообщений: 26
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Question Сортировка массива

Значит, брожу я по просторам интернета, читаю всякие статейки, и натыкаюсь на статью сортировки массива методом пузырька. И вроде бы все понятно, но не все. Вот код :
Код:
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;
Зачем делать эти лишние(на мой взгляд) присваивания?
Буду благодарен за подробный ответ
Alexey123 вне форума   Ответить с цитированием

Старый 25.02.2017, 15:20
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Посмотрите аналогичные темы на нашем форуме

Сортировка двумерного массива на QT
Сортировка массива
Сортировка массива

Старый 25.02.2017, 15:41   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Alexey123 Посмотреть сообщение
А не понятна мне вот эта строка :
Рекомендую не "бродить по просторам интернета", а заглянуть в мои заметки по методам упорядочения массивов. Там "пузырёк" рассмотрен ну очень подробно. С примером.
Цитата:
Сообщение от Alexey123 Посмотреть сообщение
Зачем делать эти лишние(на мой взгляд) присваивания?
Уверяю Вас, ничего там лишнего нет!
Давайте разбираться.
Пусть, к примеру, у Вас есть две переменных а и 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, поскольку после первого действия тройка будет утрачена навсегда.
Vladimir_S вне форума   Ответить с цитированием
Старый 25.02.2017, 15:42   #3 (permalink)
Николай_С
Радиоинженер
 
Аватар для Николай_С
 
Регистрация: 25.09.2012
Адрес: г.Дзержинск Нижегородской обл.
Сообщений: 25,300
Записей в дневнике: 7
Сказал(а) спасибо: 292
Поблагодарили 219 раз(а) в 70 сообщениях
Репутация: 110185
По умолчанию

Для этого надо просто понять алгоритм.
bubbles.preview.png

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

P.s. Упс! Игоревич уже меня опередил...

Последний раз редактировалось Николай_С; 25.02.2017 в 15:50
Николай_С вне форума   Ответить с цитированием
Старый 14.03.2017, 23:41   #4 (permalink)
Alexey123
Member
 
Регистрация: 11.12.2016
Сообщений: 26
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

А зачем в цикле добавлять единицу? Вообще, мне не совсем понятно, за что отвечают переменные i и j ? Да и зачем нам делать двойной цикл, массив то одномерный ?
P.S. Да, да, вопросы тупые, я знаю, можно обойтись без упоминания моего IQ, но мне вообще ничего не понятно. Хотя суть с буфером обмена я понял, спасибо Vladimir S!
Alexey123 вне форума   Ответить с цитированием
Старый 15.03.2017, 01:08   #5 (permalink)
Viewer
Banned
 
Регистрация: 06.03.2017
Сообщений: 788
Сказал(а) спасибо: 0
Поблагодарили 18 раз(а) в 4 сообщениях
Репутация: 5680
По умолчанию

Цитата:
Сообщение от Alexey123 Посмотреть сообщение
Вообще, мне не совсем понятно
Уверяю, менеджером быть проще.
Может программирование - это не Ваше? Такое бывает.
Viewer вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 15.03.2017, 09:26   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Alexey123 Посмотреть сообщение
Вообще, мне не совсем понятно, за что отвечают переменные i и j ?
А Вы разберитесь с понятием "цикл" в программировании, причем вне зависимости от языка. Глядишь - и понятно станет. Переписывать же сюда страницы учебников и обучающих сайтов смысла не вижу.
Цитата:
Сообщение от Alexey123 Посмотреть сообщение
Да и зачем нам делать двойной цикл, массив то одномерный ?
Это что, троллинг такой? Зачем меня цитировать?
Vladimir_S вне форума   Ответить с цитированием
Старый 15.03.2017, 21:44   #7 (permalink)
Alexey123
Member
 
Регистрация: 11.12.2016
Сообщений: 26
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Цитата:
Сообщение от Vladimir_S Посмотреть сообщение
А Вы разберитесь с понятием "цикл" в программировании, причем вне зависимости от языка. Глядишь - и понятно станет.
Действительно стало понятней! Кто же вы такой, как не обращаюсь, всегда есть ответ! Отличный форум, приятные люди, готовые помочь
P.S. Не увидел сразу вашу цитату, простите
Alexey123 вне форума   Ответить с цитированием
Старый 16.03.2017, 10:18   #8 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Alexey123 Посмотреть сообщение
Кто же вы такой
Да сам уже шесть десятков лет вопросом сим мучаюсь...
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 14:01.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.