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

Быстрая сортировка: отсортировать по возрастанию отдельно элементы первой и второй половин массива

26.04.2018, 18:49. Показов 4099. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Массив содержит четное количество элементов. Напишите программу, которая сортирует по возрастанию отдельно элементы первой и второй половин массива. Каждый элемент должен остаться в «своей» половине. Используйте алгоритм быстрой сортировки

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

Поменять местами максимумы первой и второй половин массива
Ввести массив А(n).Поменять местами максимумы первой и второй половин массива. Оба массива...

Выполнить инверсию отдельно для 1-ой и 2-ой половин массива
Заполнить массив из 10 элементов случайными числами в интервале и выполнить инверсию отдельно для...

Элементы первой половины массива отсортировать по возрастанию
Ввести одномерный массив A, вывести его. Элементы первой половины массива, отсортировать по...

Массив: выполнить инверсию отдельно для 1-ой и 2-ой половин массива.
Заполнить массив из 10 элементов случайными числами и выполнить инверсию отдельно для 1-ой и 2-ой...

4
442 / 371 / 132
Регистрация: 09.09.2011
Сообщений: 1,339
26.04.2018, 23:36 2
если использовать freepascal то он умеет по частям массивы в функцию передавать, если это использовать, то довольно просто реализовать.
0
442 / 371 / 132
Регистрация: 09.09.2011
Сообщений: 1,339
27.04.2018, 00:20 3
например как-то так:
Кликните здесь для просмотра всего текста
Delphi
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
program sorting_array_by_halves;
{задача https://www.cyberforum.ru/pascal/thread2235948.html
по условию:
Массив содержит четное количество элементов. Напишите программу,
которая сортирует по возрастанию отдельно элементы первой и второй
половин массива. Каждый элемент должен остаться в «своей» половине.
Используйте алгоритм быстрой сортировки}
 
{$mode objfpc}{$H+}
 
uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes, sysutils, math;
{quick sort from wikipedia }   {по возрастанию}
 
procedure qsort(var A: array of Integer);
 
    procedure sort(l, r: integer);
    var
      i, j, x, y: integer;
    begin
      i := l;
      j := r;
      x := A[(l + r) div 2];
      repeat
        while A[i] < x do
          Inc(i);
        while x < A[j] do
          Dec(j);
        if not (i > j) then
        begin
          y := A[i];
          A[i] := A[j];
          A[j] := y;
          Inc(i);
          Dec(j);
        end;
      until i > j;
      if l < j then
        sort(l, j);
      if i < r then
        sort(i, r);
    end;
 
begin
    sort(0, High(A));
end;
 
 
var
  arr: array of integer;
  n: integer; //size of array
  value, i: integer;
begin
  {подбираем и заполняем масивв случайными числами}
  Randomize;
  n:= RandomRange(11, 20); // размер случаен от 11 до 20
  if odd(n) then dec(n);   //если вдруг n не четное то уменьшем его на 1
  SetLength(arr, n);       //создаем массив
  //заполняем массив
  for i:=0 to pred(n) do
      arr[i]:= RandomRange(-10, 10);
  //выводим массив
  Write('Arr:        ');
  for value in arr do
      write(value:4);
  WriteLn();
 
   //сортируем по половинам:
   qsort(arr[0..pred(Length(arr) div 2)]);
   qsort(arr[Length(arr) div 2..pred(Length(arr))]);
 
 
  //выводим массив после сортировки
  Write('Sorted arr: ');
  for value in arr do
      write(value:4);
  WriteLn();
  ReadLn;
end.
Миниатюры
Быстрая сортировка: отсортировать по возрастанию отдельно элементы первой и второй половин массива  
0
442 / 371 / 132
Регистрация: 09.09.2011
Сообщений: 1,339
27.04.2018, 00:28 4
сортировку так можно вызвать, попонятней будет, т.к. длина массива у нас уже есть запомненная

Delphi
1
2
3
4
5
   {...}   
   //сортируем по половинам:
   qsort(arr[0..pred(n div 2)]);
   qsort(arr[n div 2..pred(n)]);
   {...}
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32958 / 21275 / 8169
Регистрация: 22.10.2011
Сообщений: 36,545
Записей в блоге: 8
27.04.2018, 09:49 5
В принципе, можно этот код заставить работать на любом Паскале, независимо от того, есть в нем реализация срезов массива (slices) или ее нет. Достаточно передать начальный/конечный индекс для сортировки в процедуру QSort:

Pascal
18
procedure qsort(var A: array of Integer; AStart, AFinish : integer);
, соотвтественно изменить вызов вложенной подпрограммы:
Pascal
47
48
49
begin
    sort(AStart, AFinish);
end;
, ну и вызвать сортировку для двух половин массива:
Pascal
71
72
73
   //сортируем по половинам:
   qsort(arr, 0, pred(n div 2));
   qsort(arr, n div 2, pred(n));
0
27.04.2018, 09:49
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2018, 09:49
Помогаю со студенческими работами здесь

Поменять местами минимальные элементы первой и второй половин массива
Поменять местами минимальные элементы первой и второй половин массива Тип- действительный через...

Сортировка первой половины массива по возрастанию, а второй по убыванию
Здравствуйте, помогите пожалуйста. Дан массив А, состоящий из 20 целых чисел. Отсортируйте первую...

Сортировка элементов первой половины одномерного массива по убыванию, а второй – по возрастанию
Добрый Вечер!!!Пожалуйста помогите решить задачу на Шаблоны Функций: Разработайте программу, в...

Отсортировать отдельно части массива по возрастанию
Организуйте массив, содержащий 15 различных целых чисел. После этого отдельно первые 5 элементов,...


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

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