0 / 0 / 0
Регистрация: 27.05.2016
Сообщений: 2
1

Шейкерной сортировкой упорядочить массив по возрастанию и по убыванию

22.09.2016, 21:41. Показов 1433. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Отсортировать заданный массив элементов А по возрастанию и убыванию с помощью метода шейкер-сортировки.
A (32,14,36,1,0,62,10,3)
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2016, 21:41
Ответы с готовыми решениями:

Нечетные строки матрицы упорядочить по убыванию, четные - по возрастанию (гномьей сортировкой)
Всем привет! Есть задание: Отсортировать двумерный массив. Нечетные строки по убыванию, четные по...

Упорядочить элементы заданного массива по убыванию посредством шейкерной сортировки
Программа должна создавать динамический массив, с количеством элементов указанным пользователем,...

Упорядочить массив по возрастанию и убыванию
Упорядочить массив по возрастанию и убыванию

Упорядочить массив по убыванию и по возрастанию
Дан действительный массив (An). Упорядочить массив по убыванию; по возрастанию.

1
Модератор
Эксперт Pascal/DelphiЭксперт NIX
7769 / 4598 / 2823
Регистрация: 22.11.2013
Сообщений: 13,076
Записей в блоге: 1
22.09.2016, 22:26 2
Лучший ответ Сообщение было отмечено RacheT как решение

Решение

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
type TLessFunc = function (a, b: Integer): Boolean;
procedure ShakerSort(var a: array of Integer; IsLess: TLessFunc);
var l, r, n, j, t: Integer;
begin
  l:=Low(a); n:=l; r:=High(a);
  while l<r do begin
    for j:=l to r-1 do
      if IsLess(a[j+1],a[j]) then begin
        n:=j; t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t;
      end;
    r:=n;
    for j:=r downto l+1 do
      if IsLess(a[j],a[j-1]) then begin
        n:=j; t:=a[j]; a[j]:=a[j-1]; a[j-1]:=t;
      end;
    l:=n;
  end;
end;
procedure mWrite(const a: array of Integer);
var i: Integer;
begin
  for i:=Low(a) to High(a) do Write(' ',a[i]); WriteLn;
end;
{$F+}
function less(a, b: Integer): Boolean; begin less:=a<b end;
function more(a, b: Integer): Boolean; begin more:=a>b end;
const a: array [1..8] of Integer = (32,14,36,1,0,62,10,3);
begin
  mWrite(a);
  ShakerSort(a,less); mWrite(a);
  ShakerSort(a,more); mWrite(a);
end.
Добавлено через 6 минут
или
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
type TLessFunc = function (a, b: Integer): Boolean;
procedure ShakerSort(var a: array of Integer; IsLess: TLessFunc);
  procedure swp(var a, b: Integer); var t: Integer; begin t:=a; a:=b; b:=t; end;
var l, r, n, j: Integer;
begin
  l:=Low(a); n:=l; r:=High(a);
  while l<r do begin
    for j:=l to     r-1 do if IsLess(a[j+1],a[j]) then begin n:=j; swp(a[j],a[j+1]); end; r:=n;
    for j:=r downto l+1 do if IsLess(a[j],a[j-1]) then begin n:=j; swp(a[j],a[j-1]); end; l:=n;
  end;
end;
procedure mWrite(const a: array of Integer);
var i: Integer;
begin
  for i:=Low(a) to High(a) do Write(' ',a[i]); WriteLn;
end;
{$F+}
function less(a, b: Integer): Boolean; begin less:=a<b end;
function more(a, b: Integer): Boolean; begin more:=a>b end;
const a: array [1..8] of Integer = (32,14,36,1,0,62,10,3);
begin
  mWrite(a);
  ShakerSort(a,less); mWrite(a);
  ShakerSort(a,more); mWrite(a);
end.
Добавлено через 11 минут
но можно переписать и чуть менее очевидно:
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
type TLessFunc = function (a, b: Integer): Boolean;
procedure ShakerSort(var a: array of Integer; IsLess: TLessFunc);
var l, r, n, j: Integer;
  procedure swp(var a, b: Integer); var t: Integer; begin n:=j; t:=a; a:=b; b:=t; end;
begin
  l:=Low(a); n:=l; r:=High(a);
  while l<r do begin
    for j:=l to     r-1 do if IsLess(a[j+1],a[j]) then swp(a[j],a[j+1]); r:=n;
    for j:=r downto l+1 do if IsLess(a[j],a[j-1]) then swp(a[j],a[j-1]); l:=n;
  end;
end;
procedure mWrite(const a: array of Integer);
var i: Integer;
begin
  for i:=Low(a) to High(a) do Write(' ',a[i]); WriteLn;
end;
{$F+}
function less(a, b: Integer): Boolean; begin less:=a<b end;
function more(a, b: Integer): Boolean; begin more:=a>b end;
const a: array [1..8] of Integer = (32,14,36,1,0,62,10,3);
begin
  mWrite(a);
  ShakerSort(a,less); mWrite(a);
  ShakerSort(a,more); mWrite(a);
end.
1
22.09.2016, 22:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2016, 22:26
Помогаю со студенческими работами здесь

Упорядочить двухмерный массив по возрастанию и убыванию
Помогите написать программу по упорядочивания двухмерным массивом возрастание и убывание

Массив: упорядочить массив по желанию пользователя по возрастанию или убыванию
Одномерный массив, заполненый целыми случайными числами упорядочить по желанию пользователя по...

Дан действительный массив А(п). Упорядочить массив по убыванию, по возрастанию
Дан действительный массив А(п). Упорядочить массив по убыванию, по возрастанию

Если массив А упорядочен по возрастанию, то упорядочить его по убыванию
Здравствуйте! Прошу помочь дописать код. Сижу уже 2 часа и не знаю как реализовать момент с...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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