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

Сортировка массива по убыванию

05.05.2011, 15:01. Показов 30420. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Люди, есть в delphi функция сортировки массива по убыванию? Простой одномерный числовой массив, надо чтоб у первого индекса было максимальное значение, у второго индекса значение меньше первого и т.д. Или как это реализовать? Я так полагаю нужен цикл в цикле с условиями? Короче говоря вот есть массив:
Delphi
1
2
3
4
5
6
7
8
koef[1]:=2;
koef[2]:=1;
koef[3]:=2;
koef[4]:=7;
koef[5]:=3;
koef[6]:=1;
koef[7]:=4;
koef[8]:=6;
надо чтоб было так:
Delphi
1
2
3
4
5
6
7
8
koef[1]:=7;
koef[2]:=6;
koef[3]:=4;
koef[4]:=3;
koef[5]:=2;
koef[6]:=2;
koef[7]:=1;
koef[8]:=1;
Добавлено через 4 минуты
А лучше в другой такой же массив отсортровать!
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.05.2011, 15:01
Ответы с готовыми решениями:

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

Сортировка массива по убыванию
Расположить элементы массива из 8 целых чисел в обратном порядке Я создаю на форме мемо и...

Сортировка массива по убыванию
Пожалуйста, помогите с прогой по Delphi. Нужно задать с помощью таблицы одномерный массив A...

Сортировка массива по убыванию
Здравствуйте, уважаемые форумчане. Решаю задачу: Для одномерного массива размерностью 10...

8
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
05.05.2011, 15:13 2
Лучший ответ Сообщение было отмечено как решение

Решение

вот такая процедура сортирует массив хоть по убыванию хоть по возрастанию, в зависимости какой знак поставишь больше или меньше

входные параметры массив которой будем сортировать, и длину массива


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.SortArray(a: MyArr; n: Integer);
var i,j: Integer;
    x: Integer;
begin
  for I := 1 to n - 1 do
    for j := 1 to n - 1 do
      if a[j] > a[j+1] then
        begin
          x := a[j+1];
          a[j+1] := a[j];
          a[j] := x;
        end;
end;
3
1 / 1 / 0
Регистрация: 25.11.2009
Сообщений: 35
05.05.2011, 15:25  [ТС] 3
Точняк! Спасибо.
1
3 / 3 / 0
Регистрация: 26.11.2015
Сообщений: 170
19.12.2015, 06:49 4
Если убрать 'for I := 1 to n - 1 do" то массив не отсортируется полностью, произойдет однократная перестановка. Кто объяснит, как второй массив позволяет отсортировать до конца?
Сам бы я добавил в функцию repeat/until, пока первым элементом не станет самый маленький элемент. Здесь логику работы кода вижу (почему ИМЕННО массив отсортировывается ДО КОНЦА). А там - нет, но это работает! Вот и хочу разобраться.
0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
19.12.2015, 14:00 5
Цитата Сообщение от Patsukin Посмотреть сообщение
Кто объяснит, как второй массив позволяет отсортировать до конца?
заходим в первый цикл, заходим во второй цикл, вторым циклом делаем некую перестановку если это необходимо по условию, затем второй цикл завершается, заходим снова в первый, считаем на 1 дальше, заходим снова во второй цикл - снова переставляем если условие выполнилось, и до тех пор переставляем элементы, пока мы не пройдем все комбинации и тем самым не переставим элементы пока условие выполняется.

для полнейшего понимания ка кработает алгоритм, можно посмотреть видеоанимацию, например найти можно на том же youtube, или же можно выполнить код сортировки пошагово при этом наблюдая что с чем меняется и на каком шаге

Добавлено через 4 минуты
Цитата Сообщение от Patsukin Посмотреть сообщение
Сам бы я добавил в функцию repeat/until,
это не функция, а цикл, циклы во всех языках программирования взаимозаменяются, если последует вопрос, а для чего тогда 3 цикла в дельфи сделали. тогда ответ будет просто, в зависимости от применения

for удобно использовать если заранее известны границы счета, например пройтись по массиву.
while удобно использовать когда не известно сколько считать, но при этом обуславливаемся неким условием при котором счет будет выполняться
repeat-until - сравним с while'ом, но разница в блоке сравнения, в первом сравнение должно выполниться минимум 1 раз, чтобы цикл выполнился хотябы 1 раз, второй же, выполнится минимум 1 раз при любом условии, дальнейшая работа зависит от блока сравнения
1
3 / 3 / 0
Регистрация: 26.11.2015
Сообщений: 170
19.12.2015, 17:15 6
Спасибо, разобрался!
0
0 / 0 / 0
Регистрация: 23.03.2017
Сообщений: 3
16.09.2021, 00:58 7
Код
procedure TForm1.SortArray(a: MyArr; n: Integer);
var i,j: Integer;
    x: Integer;
begin
  for I := 1 to n - 1 do
    for j := 1 to n - 1 do
      if a[j] > a[j+1] then
        begin
          x := a[j+1];
          a[j+1] := a[j];
          a[j] := x;
        end;
end;
Немного кривой код, строчка to n - 1 несовместима со строкой x := a[j+1], это неизбежный выход за размер массива, и приведет к ошибке. Кроме того for j := 1 начнет сортировать не с первого элемента, а со второго, соответственно если первый больше скажем второго, то его оно не отсортирует
0
Модератор
3627 / 2148 / 759
Регистрация: 15.11.2015
Сообщений: 8,623
16.09.2021, 01:06 8
Надо MyArr задавать с 1 элемента, тогда всё нормально сработает.

Не по теме:

Теме 10 лет как бы.

0
5705 / 2296 / 466
Регистрация: 20.11.2009
Сообщений: 7,720
Записей в блоге: 1
16.09.2021, 09:47 9
Ой, позывы прошлого прям напали, вчера только вспоминали 2009 год, тут уже и 2011 вылился))

Цитата Сообщение от AzAtom Посмотреть сообщение
Надо MyArr задавать с 1 элемента, тогда всё нормально сработает.
да, как это в исходном примере от ТС

Но хоть кто-то поворчал, хоть и через 10 лет..
0
16.09.2021, 09:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2021, 09:47
Помогаю со студенческими работами здесь

Сортировка массива обменом по убыванию
сортировка массива обменом по убыванию ЧЕРЕЗ ПРОЦЕДУРУ

Сортировка массива по возрастанию и убыванию
Работа с массивами в делви7 Помогмите пожалуйста в Десфи 7 создать программы для сортировки по...

Сортировка массива по убыванию среднего балла
Как сортировать одномерный массив по убыванию среднего балла ? Напишите пожайлуста :) Язык...

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


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

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

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