С Новым годом! Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 16.03.2018
Сообщений: 14
1

Разработка с использованием быстрой сортировки (по методу Хоара)

16.03.2018, 19:05. Показов 1146. Ответов 7
Метки нет (Все метки)

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

Помогите пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2018, 19:05
Ответы с готовыми решениями:

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

Разработайте рекурсивную процедуру сортировки последовательности методом быстрой сортировки Хоара
Помогите!!!! Дана последовательность чисел a1, a2, ... , an. Разработайте рекурсивную процедуру...

Использованием быстрой сортировки (по методу Хоара)
Организуйте массив, состоящий из 20 различных целых чисел. Упорядочите его по возрастанию. После...

Разработка с использованием сортировки по методу Шелла
В данном двумерном массиве упорядочить элементы, расположенные после второго максимального элемента...

7
Эксперт Pascal/Delphi
6811 / 4568 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
17.03.2018, 08:49 2
Сортировка методом Хоара
0
0 / 0 / 0
Регистрация: 16.03.2018
Сообщений: 14
20.03.2018, 21:29  [ТС] 3
На форуме есть такой же вопрос, но до конца на него не ответили, может кто-нибудь сможет помочь, глядя на него.
Организуйте массив, содержащий 20 различных целых чисел. Отсортируйте отдельно
0
0 / 0 / 0
Регистрация: 16.03.2018
Сообщений: 14
25.03.2018, 18:15  [ТС] 4
По идеи код должен выглядеть похожим образом, но я не знаю как при первой и второй сортировке правильно прописать чётность и не чётность элементов (x:=it [(2+r)div 2]; нужно в этой строке что-то поменять, но не знаю что, так же ошибка в этой строке x:=it [(2+r) div 2]; - 53.pas(20) : Нет индексного свойства по умолчанию для типа integer)

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
var
i,j:integer;
x,y:dataitem;
begin
 
i:=1; j:=r;
x:=it [(2+r) div 2];
repeat
while it [i]<x do i:=i+2;
while x<it [j] do j:=j-2;
if y<=j then
begin
 
j:=it[i];
it [i]:= it[j];
it [j]:=y;
i:=i+2; j:=j-2;
end;
until 2>j;
if  2 < j then qs(i,j, it);
if 2 < r then qs (i, r, it);
end;
 
begin
qs (2, count, item);
end ;
procedure quicksort (var item: dataarray; count: integer);
procedure qs (l,r:integer; var it: dataarray);
var
i,j:integer;
x,y:dataitem;
begin
 
i:=1; j:=r;
x:=it [(2+r) div 2];
repeat
while it [i]<x do i:=i+2;
while x<it [j] do j:=j-2;
if y<=j then
begin
 
j:=it[i];
it [i]:= it[j];
it [j]:=y;
i:=i+2; j:=j-2;
end;
until 2>j;
if  2 < j then qs(i,j, it);
if 2 < r then qs (i, r, it);
end;
 
begin
qs (2, count, item);
end;
begin
writeln('Исходный массив:');
for i:=1 to n do
  begin
   x[i]:=random(20);
   write(x[i]:4);
  end;
writeln;
writeln('Массив после сортировки: ');
for i:=1 to n do
write(x[i]:4);
end.
0
5084 / 2655 / 2350
Регистрация: 10.12.2014
Сообщений: 10,048
26.03.2018, 12:23 5
Лучший ответ Сообщение было отмечено Norbes как решение

Решение

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
var a, o : array of Integer;
 
procedure qSortU(L, R : Integer);
begin
  var (i,j,x) := (L,R,a[o[(L + R) div 2]]);
  repeat
    while a[o[i]] < x do i += 1;
    while a[o[j]] > x do j -= 1;
    if i <= j then begin if a[o[i]] > a[o[j]] then Swap(a[o[i]],a[o[j]]); i += 1; j -= 1; end;
  until i >= j;
  if L < j then qSortU(L, j);
  if i < R then qSortU(i, R);
end;
 
procedure qSortD(L, R : Integer);
begin
  var (i,j,x) := (L,R,a[o[(L + R) div 2]]);
  repeat
    while a[o[i]] > x do i += 1;
    while a[o[j]] < x do j -= 1;
    if i <= j then begin if a[o[i]] < a[o[j]] then Swap(a[o[i]],a[o[j]]); i += 1; j -= 1; end;
  until i >= j;
  if L < j then qSortD(L, j);
  if i < R then qSortD(i, R);
end;
 
begin
  a := ArrRandomInteger(20,10,99);
  a.Println;
  
  /// Сортируем нечётные по убыванию
  o := a.Select((x,i)->(x,i)).Where(x->odd(x[0])).Select(x->x[1]).ToArray;
  qSortD(0, o.Count-1);
  
  /// Сортируем чётные по возрастанию
  o := a.Select((x,i)->(x,i)).Where(x->Not odd(x[0])).Select(x->x[1]).ToArray;
  qSortU(0, o.Count-1);
 
  a.Println;
end.
1
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32992 / 21298 / 8180
Регистрация: 22.10.2011
Сообщений: 36,593
Записей в блоге: 8
26.03.2018, 14:52 6
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Можно и не дублировать почти одинаковые функции:
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
var
  a, o: array of integer;
 
procedure qs(L, R: Integer; order: integer);
begin
  var i := L; var j := R; var x := a[o[(L + R) div 2]];
  repeat
    while Sign(a[o[i]] - x) = order do i += 1;
    while Sign(a[o[j]] - x) = -order do j -= 1;
    if i <= j then begin if Sign(a[o[i]] - a[o[j]]) = -order then Swap(a[o[i]], a[o[j]]); i += 1; j -= 1; end;
  until i >= j;
  if L < j then qs(L, j, order);
  if i < R then qs(i, R, order);
end;
 
begin
  a := ArrRandomInteger(20, 10, 99);
  a.Println;
  o := a.IndexesOf(x -> not Odd(x)).ToArray;
  qs(0, o.Count - 1, -1);
  o := a.IndexesOf(x -> Odd(x)).ToArray;
  qs(0, o.Count - 1, 1);
  a.Println;
end.
0
5084 / 2655 / 2350
Регистрация: 10.12.2014
Сообщений: 10,048
27.03.2018, 06:42 7
Лучший ответ Сообщение было отмечено ZX Spectrum-128 как решение

Решение

Цитата Сообщение от volvo Посмотреть сообщение
Можно и не дублировать почти одинаковые функции:
Когда делал у себя на компе, я сначала использовал sign…
Но, для выкладки на сайт решил, чтобы ТС-у было проще сдать, упростить расписав их по отдельности в ущерб универсальности ;–)
0
0 / 0 / 0
Регистрация: 16.03.2018
Сообщений: 14
28.03.2018, 13:26  [ТС] 8
Спасибо большое!!!
0
28.03.2018, 13:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.03.2018, 13:26
Помогаю со студенческими работами здесь

Метод быстрой сортировки Хоара
Дан одномерный числовой массив. Выполнить сортировку элементов массива по возрастанию, используя...

Вычислить глубину рекурсии быстрой сортировки методом Хоара
Здраствуйте! Мне нужно вычислить глубину рекурсии алгоритма быстрой сортировки в завивимости от...

Какие еще есть методы быстрой сортировки кроме Хоара?
Какие еще есть методы быстрой сортировки кроме Хоара?

Визуализатор по быстрой сортировке Хоара на С++
Всем доброго времени суток, я начинающий программист и на этом форуме не случайно. Конец семестра,...


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

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