Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
08 мая 2024, 19:21

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

Автор Герман Штайнер, 05 мая 2013, 21:18

0 Пользователей и 1 гость просматривают эту тему.

Герман Штайнер

подскажите пожалуйста как сделать сортировку массива? Поправьте пожалуйста код


n=7;
arr = Новый Массив (n);
 
arr[0]=9;
arr[1]=15;
arr[2]=3;
arr[3]=23;
arr[4]=5;
arr[5]=6;     
arr[6]=56;

Для j = 0 По n-1 Цикл


Для i = 0 По n-j Цикл

Если arr[j]>arr[j+1] Тогда
k= arr[j];
arr[j]=arr[j+1];
arr[j+1]=k;
КонецЕсли;
КонецЦикла;
КонецЦикла;

Для Каждого d Из arr Цикл
Сообщить("Отсортированный массив: "+d );
    КонецЦикла;



Dethmontt

Если долго всматриваться в учебник...то в голову может прийти мысль его открыть!

Герман Штайнер

переделал код как указано в ссылке

n=7;
arr = Новый Массив (n);
 
arr[0]=21;
arr[1]=4;
arr[2]=1;
arr[3]=5;
arr[4]=23;
arr[5]=12;
arr[6]=18;

Для j = 0 По arr.Количество()-1 Цикл

Для i = 0 По arr.Количество()-j Цикл
Если i = arr.Количество()-1 Тогда
Прервать;
КонецЕсли;

Если arr[i]>arr[i+1] Тогда
st_el = arr[i];
m_el=arr[i+1];
arr[i]=m_el;
arr[i+1]=st_el;

КонецЕсли;
КонецЦикла;
КонецЦикла;

Для Каждого d Из arr Цикл
Сообщить("Отсортированный массив: "+d );
    КонецЦикла;



Заметил такую вещь: если не написать

Если i = arr.Количество()-1 Тогда
Прервать;
КонецЕсли;

то программа не будет выполняться. Почему это происходит? Например в с++ такую проверку делать не нужно!

has

Вероятно потому что если i = 6, тогда
Если arr[i]>arr[i+1] Тогда
тут будет ошибка индекса за пределами значения(точную формулировку не помню). Т.е. программа будет пытаться получить элемент arr[7], которого не существует.

Codokopatel

Можно попробовать через использование списка значений.
ПРИМЕЧАНИЕ: Сообщения используются для контроля процесса.
Разработано в 1С 8.2, режим "Управляемое приложение".

&НаКлиенте
Процедура СортировкаМассива(Команда)
// Запонение массива данными
arr = Новый Массив();
arr.Добавить(21);
arr.Добавить(4);
arr.Добавить(1);
arr.Добавить(5);
arr.Добавить(23);
arr.Добавить(12);
arr.Добавить(18);

// *** Вывод списка значений в несортированном массиве
Сообщить("Несортированный массив:");
Для каждого ЭлементМассива из arr цикл
Сообщить(ЭлементМассива);
КонецЦикла;
// ***

// Выгрузка данных из массива в списрк значений
СписокДляСортировки = Новый СписокЗначений();
СписокДляСортировки.ЗагрузитьЗначения(arr);
// Сортировка списка значений по значению элементов
СписокДляСортировки.СортироватьПоЗначению();
// Загрузка сортированного списка обратно в массив
arr = СписокДляСортировки.ВыгрузитьЗначения();

// ** Вывод списка значений в сортированном массиве
Сообщить("Отсортированный массив:");
Для каждого ЭлементМассива из arr цикл
Сообщить(ЭлементМассива);
КонецЦикла;
// ***
КонецПроцедуры


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск