Форум программистов, компьютерный форум, киберфорум
Sasha
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  

Упорядочивание массива методом Ларионова (Larionov Sort)

Запись от Sasha размещена 13.03.2014 в 15:49
Показов 3400 Комментарии 0

В 2004 г. четырнадцатилетний Матвей Ларионов на занятиях по изучению TurboPascal предложил свой оригинальный метод сортировки. Сущность преобразования исходного массива состоит в том, чтобы вначале расположить все нечётные элементы, а за ними - все чётные.
В этом методе при последовательном просмотре каждого элемента исходного массива mass с номером ij осуществляется подсчёт текущего числа ik нечётных элементов (он начинается с единицы). В начале просмотра ik=0. В ходе анализа элементов массива может возникнуть две ситуации:

1. Все пересмотренные элементы являются нечётными, поэтому их расположение изменять не следует.
2. За (слева) текущим нечётным элементом находится один или больше чётных элементов. Поэтому упомянутый нечётный элемент и первый слева нечётный элемент нужно поменять местами. В результате обмена правая граница группы ячеек с нечётными числами продвигаются вправо. После анализа последнего элемента массива требуемых порядок будет установлен.

C++
1
2
3
4
5
6
7
8
9
10
11
12
 // Cортировка Ларионова
  int ik = 0; // Число нечётных элементов перед просмотром mass
     for(int ij = 0, iByf; ij < list->Count; ++ij) //iByf от Byfer
      {
        if(mass[ij]%2==1)//Если число нечётное
        {
         iByf = mass[ik];//Временное хранение чётного элемента
         mass[ik] = mass[ij];//Меняем местами текущий нечётный элемент
         mass[ij] = iByf;//с первым чётным
         ik++;//счётчик числа нечётных элементов
        }
      }
В этом примере я использовал такие компоненты как:

Edit1(InputMas)
Edit2(OutputMas)
Button1(Power)
Label1(In Mas) // для подписи к Edit1(InputMas)
Label2(Out Mas) // для подписи к Edit2(OutputMas)

В первый InputMas будем вводить через пробел числа для сортировки. При нажатии на Power числа в отсортированном виде будут выводиться в OutputMas.

Перетягиваем на форму вышеперечисленные компонеты и пишем фунцию. Функция выглядит таким образом:

C++
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
AnsiString LarionovSort(AnsiString asd)
{
 
 TStringList * list = new TStringList();  //создаём динамически объект класса TStringList
 list->DelimitedText = Trim(asd);         //разделяем строки в объекте list и удаляем передний и задний пробел в строке
 list->Delimiter = ' ';                   //разделитель
 
 asd ="";
 int *mass = new int[list->Count]; //создаём массив с текущей длиной по количеству строк объекта list класса TStringList();
 
 for(int d = 0; d < list->Count; d++)
 {
   mass[d] = list->Strings[d].ToInt();  //заносим данные в массив
 }
  // Cортировка Ларионова
  int ik = 0; // Число нечётных элементов перед просмотром mass
     for(int ij = 0, iByf; ij < list->Count; ++ij) //iByf от Byfer
      {
        if(mass[ij]%2==1)//Если число нечётное
        {
         iByf = mass[ik];//Временное хранение чётного элемента
         mass[ik] = mass[ij];//Меняем местами текущий нечётный элемент
         mass[ij] = iByf;//с первым чётным
         ik++;//счётчик числа нечётных элементов
        }
 
      }
 
 
 for (int s = 0; s < list->Count; s++)
   {
    asd+=IntToStr(mass[s])+ " ";       // заносим информацию из массива в переменную asd
   }
 
  delete [] mass; // удаление объекта массива созданного динамически
  mass = NULL;
  delete list;    // удаление объекта list созданного динамически
  list = NULL;
  return asd;
}
void __fastcall TForm1::PowerClick(TObject *Sender)
{
if(InputMas->Text.IsEmpty())
 {
    ShowMessage("Введите в поле через пробел вещественные числа ");
    InputMas->SetFocus();
    return;
 }
 OutputMas->Text = LarionovSort(InputMas->Text); //вызов функции  SelectionSort
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::FormShow(TObject *Sender)
{
InputMas->Text = "15 106 12 5 22";
}

Скриншот программы прилагается:

Нажмите на изображение для увеличения
Название: Безымянный.JPG
Просмотров: 1105
Размер:	12.1 Кб
ID:	2151



Программа создавалась в среде разработки С++Builder 6


Источник: Федоренко Ю.П "Алгоритмы и программы на С++ Builder" г. Москва, 2010 г.
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru