Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 26.09.2017
Сообщений: 1
1

Сортировка пузырьком по убыванию

26.09.2017, 09:30. Показов 3848. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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
const n=10;
var A:array[1..n] of integer;
m,i,j,x:integer;
Sr:real;
Begin 
Sr:=0;
For i:=1 to n do begin
                 A[i]:=random(100)-50;
                 if (A[i] mod 5=0) and not (A[i] mod 10=0) then begin 
                                                                 Sr:=Sr+A[i];
                                                                 inc(m);
                                                                 end;                                                
                 end;
writeln('Ср.А=',Sr/m);
for i:=1 to n do write(A[i]:5);
writeln;
for i:=1 to n-1 do
                for j:=i+1 to n do
                                if a[i]<a[j] then
                                                  begin
                                                  x:=a[i];
                                                  a[i]:=a[j];
                                                  a[j]:=x;
                 end;                 
writeln('по убыванию');
for i:=1 to n do
write(a[i]:4);
end.

не понимаю, в первом шаге сравнивается а1 и а2, (-15 и -49) где условие ложно, тогда число -15 остается на месте, (но в итоговом массиве он почему-то оказался по-середине!) а цикл возвращается к внутреннему циклу, то бишь опять к j:=i+1, так как мы не возвращались к первому циклу, то I должна остаться единицей. Значит J снова 2? тогда опять сравнивается а1 и а2? Объясните выполнение цикла
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.09.2017, 09:30
Ответы с готовыми решениями:

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками»
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array ...

Сортировка Пузырьком,
Задача: Дана последовательность не более 100 чисел,вводятся все числа пользователем 0-конец файла...

Сортировка Пузырьком
Сортировка методом обмена. Помогите изменить реализацию так, чтобы осуществлялась сортировка...

Сортировка пузырьком
Товарищи,прошу помощи. Нужно отсортировать массивчик методом пузырька. Как только не...

5
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
26.09.2017, 10:13 2
1) Это не пузырек.
2) Вложенные циклы выполняются так:
i=1, каждый со 2-го по n-ый элемент (j-ый) сравнивается с 1-ым (i-ым), если больше (a[j]>a[j]), меняются местами
i=2, каждый с 3-го по n-ый элемент (j-ый) сравнивается со 2-ым (i-ым), если больше, меняются местами
...
i=n-1, n-ый (j-ый) сравнивается с (n-1)-ым (i-ым), если больше, меняются местами
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
26.09.2017, 10:58 3
Можно для наглядности запустить такой код.
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
const n=5;
var a:array[1..n] of byte;
    i,j,k,x:byte;
begin
for i:=1 to n do
 begin
  a[i]:=i;//самый сложный для сортировки по убыванию
  write(a[i]:3);
 end;
writeln;
writeln('Сортировка');
for i:=1 to n-1 do   //от 1 до предпоследнего
 begin
  writeln('i=',i);
  for j:=i+1 to n do   // смотрим что впереди
  if a[i]<a[j] then   //если меньше обмениваем, и так до конца массива
    begin
     x:=a[i];
     a[i]:=a[j];
     a[j]:=x;
     writeln('  j=',j);
     for k:=1 to n do
     write(a[k]:3);
     writeln;
    end;
  end;
end.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
26.09.2017, 11:52 4
3) Пузырек по убыванию это:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
const n=10;
var
  a: array [1..n] of Integer;
  i, j, nn, t: Integer;
begin
  Randomize;
  for i:=1 to n do a[i]:=-50+Random(101);
  Write('A ='); for i:=1 to n do Write(' ',a[i]:3); WriteLn;
 
  nn:=High(a);
  repeat
    i:=nn; nn:=Low(a);
    for j:=Low(a) to i-1 do
      if a[j+1]>a[j] then begin
        nn:=j; t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t;
      end;
  until nn=Low(a);
 
  Write('A''='); for i:=1 to n do Write(' ',a[i]:3); WriteLn;
end.
1
Alvin Seville
343 / 273 / 134
Регистрация: 25.07.2014
Сообщений: 4,537
Записей в блоге: 9
02.10.2017, 13:51 5
Pascal
1
2
3
4
5
6
7
8
begin
  var N := ReadlnInteger('Размер массива:');
  var &Array := ReadArrInteger(N);
  for var j := N - 1 downto 0 do
    for var i := 0 to j - 1 do
      if &Array[i] < &Array[i + 1] then Swap(&Array[i], &Array[i + 1]);
  Writeln(&Array);
end.
Добавлено через 1 минуту
Или:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
begin
  var N := ReadlnInteger('Размер массива:');
  var &Array := ReadArrInteger(N);
  var IsSwapped := false;
  
  for var j := N - 1 downto 0 do
  begin
    IsSwapped := false;
    for var i := 0 to j - 1 do
      if &Array[i] < &Array[i + 1] then
      begin
        Swap(&Array[i], &Array[i + 1]);
        IsSwapped := true;
      end;
    if IsSwapped = false then break;
  end;
  Writeln(&Array);
end.
Добавлено через 26 минут
P. S. красивей:
Pascal
1
if not IsSwapped
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,077
Записей в блоге: 1
02.10.2017, 17:28 6
Цитата Сообщение от Volobuev Ilya Посмотреть сообщение
P. S. красивей:
зато менее эффективно, чем сохранение позиции последнего обмена в алгоритме выше.
Какая же это красота?
0
02.10.2017, 17:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.10.2017, 17:28
Помогаю со студенческими работами здесь

Сортировка пузырьком и выбором
Парни, что общего между сортировкой пузырьком и сортировкой выбором?

Сортировка строки пузырьком
Кто-то может помочь отсортировать пузырьком обычную строку по типу (Aa..Zz) (именно латинский...

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

Отсортировать массив сначала по возрастанию, потом по убыванию (не "пузырьком")
Нужно отсортировать массив сначала по возрастанию потом по убыванию(НЕ пузырковым методом)....

Сортировка пузырьком
Дана матрица. Найти минимум в каждой строке и максимум в столбцах, вывести в новые массивы, методом...

Сортировка пузырьком
Нужно сделать так, чтобы на каждом шаге выводился массив (частично отсортированный) а также число...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru