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

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

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

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

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

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

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

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

4
34 / 47 / 40
Регистрация: 20.03.2013
Сообщений: 185
08.11.2013, 20:38 2
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
Супер-модератор
6197 / 2945 / 1300
Регистрация: 04.03.2013
Сообщений: 5,791
Записей в блоге: 1
08.11.2013, 21:23 3
ilyadenisovid, пузырьком?
butoxors1, ну да, это простейший вариант... А вообще про сортировки можно почитать тут (обратите внимание на метки в конце темы): Сортировки
1
11 / 11 / 6
Регистрация: 04.01.2013
Сообщений: 67
09.11.2013, 02:58 4
Лучший ответ Сообщение было отмечено 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  [ТС] 5
Спасибо вам большое)выручили)Тему можно и закрыть.
0
09.11.2013, 19:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.11.2013, 19:19
Помогаю со студенческими работами здесь

Вывод массива и сортировка
Программа uses crt, typing, sorting, merge; var a,b,c,p,d:massive; ...

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

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

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

Сортировка элементов массива
Отсортировать нечетные элементы массива по убыванию. Остальные оставить без изменений

Сортировка массива символов по алфавиту
Отсортировать элементы массива символов по алфавиту.


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

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