Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/75: Рейтинг темы: голосов - 75, средняя оценка - 4.75
0 / 0 / 2
Регистрация: 21.05.2013
Сообщений: 26

Сортировка массива

08.11.2013, 19:34. Показов 13667. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем доброе время суток, столкнулся с проблемой сортировки массива от отрицательного до положительного, или иными словами просто сортировкой, не могли бы вы подсказать, как это можно реализовать на Паскале в программе PascalABC.Net
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2013, 19:34
Ответы с готовыми решениями:

Сортировка массива
Отсортировать одномерный массив размера k, вводимого пользователем, так, чтобы положительные элементы чередовались с отрицательными без...

Сортировка массива
Необходимо ввести любые символы в 20 символьный массив и упорядочить по возрастанию номера асц- кода. Пожалуйста, помогите.

Сортировка массива
Доброго времени суток. Вот вариант метода сортировки массива пузырьком. Здесь,по-моему,максимальная сложность N2. Можно как-то упростить...

4
34 / 47 / 40
Регистрация: 20.03.2013
Сообщений: 185
08.11.2013, 20:38
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
program test;
uses crt;
var
  arr : array[1..20] of integer;
  i, j, t : integer;
begin
randomize;
for i := 1 to 20 do 
begin
  arr[i] := -100 + random(201);
  write(arr[i], ' ');
end;
writeln;
for i := 1 to 19 do
begin
  for j := i + 1 to 20 do
  begin
    if arr[i] > arr[j] then
    begin
    t := arr[i];
    arr[i] := arr[j];
    arr[j] := t;
    end;
  end;
end;
for i := 1 to 20 do
begin
write(arr[i], ' ');
end;
readln;
end.
1
Почетный модератор
 Аватар для ildwine
6199 / 2950 / 1300
Регистрация: 04.03.2013
Сообщений: 5,794
Записей в блоге: 1
08.11.2013, 21:23
ilyadenisovid, пузырьком?
butoxors1, ну да, это простейший вариант... А вообще про сортировки можно почитать тут (обратите внимание на метки в конце темы): Сортировки
1
11 / 11 / 6
Регистрация: 04.01.2013
Сообщений: 67
09.11.2013, 02:58
Лучший ответ Сообщение было отмечено ildwine как решение

Решение

Вот несколько разных реализаций

Во всех алгоритмах используется процедура
Pascal Скопировано
1
2
3
4
5
6
procedure Swap(var a, b: integer);
  begin
    var c:=a;
    a:=b;
    b:=c;
  end;
Сортировка пузырьком
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
За каждый проход элементы последовательно сравниваются попарно и, 
если порядок в паре неверный, выполняется обмен элементов. 
Проходы по массиву повторяются N-1 раз или до тех пор, 
пока на очередном проходе не окажется, что обмены больше не нужны, 
что означает — массив отсортирован. 
При каждом проходе алгоритма по внутреннему циклу, 
очередной наибольший элемент массива ставится на своё место 
в конце массива рядом с предыдущим наибольшим элементом, 
а наименьший элемент перемещается на одну позицию к началу массива 
(«всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма).
 
 
Сложность: O(n*n)
}
 
procedure sort(a: array of integer);
begin
  for var i:=0 to a.Length-2 do
    for var j:=i+1 to a.length-1 do
      if a[i]>a[j]
        then swap(a[i],a[j]);
end;
Сортировка вставками
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{
На каждом шаге алгоритма мы выбираем один из элементов входных данных и 
вставляем его на нужную позицию в уже отсортированном списке, до тех пор, 
пока набор входных данных не будет исчерпан. Метод выбора очередного элемента из исходного массива произволен; 
может использоваться практически любой алгоритм выбора. Обычно (и с целью получения устойчивого алгоритма сортировки), 
элементы вставляются по порядку их появления во входном массиве.
 
Сложность: O(n*n)
}
 
procedure sort(a: array of integer);
begin
  for var i:=1 to a.Length-1 do
    begin
      var j:=i-1;
      var key:=a[i];
      while (j>0) and (key<a[j]) do
        begin
          a[j+1]:=a[j];
          dec(j);
        end;
    end;    
end;
Гномья сортировка
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
Алгоритм сортировки, похожий на сортировку вставками, 
но в отличие от последней перед вставкой на нужное место 
происходит серия обменов, как в сортировке пузырьком.
 
Сложность: O(n*n)
}
 
procedure sort(a: array of integer);
begin
  for var i:=1 to a.Length-1 do
    begin
      var j:=i;
      while (j>0) and (a[j]<a[j-1]) do
        begin
          swap(a[j],a[j-1]);
          dec(j);
        end;
    end;    
end;
Шейкерная сортировка
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
{
На каждом шаге основного цикла рассматривается массив a[Left]÷a[Right], 
после выполнения двух внутренних циклов минимальный и максимальный элемент 
в исходном массиве перетекают к краям, минимальный в — a[Left], максимальный — в a[Right]. 
Пусть максимальный элемент имеет индекс k, тогда массив можно изобразить так: 
a[Left],a[1],..,a[k-1],A[k],a[k+1],..,a[Right];
После сравнения A[k] с a[k+1] значение A[k] перейдет в k+1-ую ячейку,
после сравнения k+1-ой c k+2-ой – в k+2-eю,и так далее,
пока он не сместится в крайне правое положение с индексом Right. 
Аналогично для минимального. После выполнения цикла по всем подмассивам он отсортируется. 
 
Сложность: O(n*n)
}
 
procedure sort(a: array of integer);
begin
  var first:=0;
  var last:=a.Length-1;
  while first < last do
    begin
      for var i:= first to last-1 do
        if a[i]>a[i+1] 
          then swap(a[i],a[i+1]);
      dec(last);
      for var i:= last downto first+1 do
        if a[i]<a[i-1]
          then swap(a[i],a[i-1]);
      inc(first);
    end;
end;
Сортировка выбором
Pascal Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{
Шаги алгоритма:
 
    1. находим номер минимального значения в текущем списке
    2. производим обмен этого значения со значением первой неотсортированной позиции (обмен не нужен, если минимальный элемент уже находится на данной позиции)
    3. теперь сортируем хвост списка, исключив из рассмотрения уже отсортированные элементы
Сложность: O(n*n)
}
 
procedure sort(a: array of integer);
begin
  var current: integer;
  for var i:=0 to a.Length-2 do
    begin
      current:=i;
      for var j:=i+1 to a.length-1 do
        if a[current]>a[j]
          then current:=j;
      swap(a[current],a[i]);
    end;
end;
И на сладкое кое-что посложнее и побыстрее
Пирамидальная сортировка
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
{
1. Выстраиваем элементы массива в виде сортирующего дерева
 
2. Будем удалять элементы из корня по одному за раз и перестраивать дерево. 
То есть на первом шаге обмениваем Array[1] и Array[n], преобразовываем Array[1], Array[2], … , Array[n-1] в сортирующее дерево. 
Затем переставляем Array[1] и Array[n-1], преобразовываем Array[1], Array[2], … , Array[n-2] в сортирующее дерево. 
Процесс продолжается до тех пор, пока в сортирующем дереве не останется один элемент. 
Тогда Array[1], Array[2], … , Array[n] — упорядоченная последовательность.
 
Сложность: O(n log n)
}
 
procedure heapify(a: array of integer; i,max: integer);
begin
    var temp:=i;
    if (2*i<max) and (a[2*i]>a[i-1]) and (a[2*i]>a[2*i-1])
      then temp:=2*i+1 else
    if (2*i-1<max) and (a[2*i-1]>a[i-1])
      then temp:=2*i;
    if temp<>i then
      begin
        swap(a[i-1],a[temp-1]);
        heapify(a,temp,max);
      end;
end;
procedure sort(a: array of integer);
begin
  var max:=a.Length;
  //generate tree
  for var i:=a.Length downto 1 do
    heapify(a,i,max);
  //sorting
  while max>1 do
    begin
      swap(a[0],a[max-1]);
      dec(max);
      heapify(a,1,max);
    end;
end;
2
0 / 0 / 2
Регистрация: 21.05.2013
Сообщений: 26
09.11.2013, 19:19  [ТС]
Спасибо вам большое)выручили)Тему можно и закрыть.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.11.2013, 19:19
Помогаю со студенческими работами здесь

Сортировка массива по ключу
Как отсортировать массив по ключу? const N = 10; type Student = class Name, Surname: string; Assessments:...

Вывод массива и сортировка
Программа uses crt, typing, sorting, merge; var a,b,c,p,d:massive; na,nb,nc,np,nd,i,j:integer; begin clrscr; ...

Сортировка двумерного массива
Здравствуйте. Нужно отсортировать двумерный массив по минимальному элементу в строке. Я код примерный сделал, но не получается что то. ...

Сортировка двумерного массива
Массив заполняется произвольно. Количество элементов массива произвольное (не менее 10 для одномерного, не менее 5х5 для двумерного. Метод...

Сортировка массива string
Уже битый час не могу понять в чем проблема, хотя задача очень простая. Суть задачи: Пользователь вводит строку из 2х и более слов через...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
Метод с двумя буферами (или double buffering) или ping-pong buffering
Hrethgir 02.04.2025
Из ответов LM модели. Метод, который предполагает использование двух массивов для хранения промежуточных результатов сложения векторов, обычно применяется в сценариях, где необходимо минимизировать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер