dir.by  
  Поиск  
Компьютер, программы
Математические алгоритмы (пересечение прямоугольников, массивы, графы)
 Сортировка массива (алгоритмы) 
посмотрели 5347 раз
обновлено: 11 января 2019
Алгоритмы
Алгоритм "Сортировка выбором"
1. Находим минимальный элемент в массиве.
2. Меняем местами минимальный и первый элемент местами.
3. Опять ищем минимальный элемент в неотсортированной части массива
4. Меняем местами уже второй элемент массива и минимальный найденный, потому как первый элемент массива является отсортированной частью.
5. Ищем минимальные значения и меняем местами элементы,пока массив не будет отсортирован до конца.
Алгоритм "Сортировка пузырьком"
1. Каждый элемент массива сравнивается со следующим.
Если элемент[k] > элемента[k+1] то происходит замена.
Таким образом самые "легкие" элементы "всплывают" - перемещаются к началу списка.
Самые тяжелые элементы "тонут" - перемещаются к концу.
2. Повторяем n-1 раз, где n это количество элементов в массиве
Алгоритм "Сортировка вставками"
1. С самого начала берем 2-ой элемент и смотрим влевую часть массива куда вставить, (если 2-ой элемент меньше 1-го элемента то вставляем перед первым элементом).
2. Берем 3-ий элемент и смотрим влевую часть массива куда вставить перед первым или перед вторым.
3. Берем 4-ый элемент и смотрим влевую часть массива куда вставить
и т.д.

Анимация:
Пример "Сортировка вставками"
  C#     Создаем новое C# консольное приложение... и напишем код
using System;

namespace ConsoleApplication1
{
     class Program
     {
          static public void InsertValue(int posFrom, int insertTo, int[] vals)
          {
               // получаем значение
               int a = vals[posFrom];

               // смещаем массив вправо
               for (int i = (posFrom - 1); i >= insertTo; i--)
               {
                    vals[i+1] = vals[i];
               }

               // присваиваем (вставляем) значение в нужную позицию
               vals[insertTo] = a;
          }

          // Сортировка вставками
          static public void Sort(int[] vals)
          {
               // идем вправо
               for (int i = 1; i < vals.Length; i++)
               {
                    // идем по левой части массива
                    for (int insertTo = 0; insertTo < i; insertTo++)
                    {
                         // нашли место для вставки
                         if (vals[i] < vals[insertTo])
                         {
                              // вставляем элемент
                              InsertValue(i, insertTo, vals);
                              break;
                         }
                    }
               }
          }

          static void Main(string[] args)
          {
               // add values
               int[] values = { 10, 20, 5, 7, 13, 2 };

               // сортировка вставками
               Sort(values);

               // выводим значения на экран
               for (int i = 0; i < values.Length; i++)
                    Console.WriteLine(values[i]);

               // на экране увидим
               // 2
               // 5
               // 7
               // 10
               // 13
               // 20
          }
     }
}
Алгортим "Быстрая сортировка"
Является одним из самых эффективных алгоритмов сортировки данных.
Вся суть алгоритма сводится к тому, чтобы разбить сложную задачу на маленькие и решить их по отдельности.
Выбирается некая опорная точка и все значения которые меньше перебрасываются влево, все остальные вправо.
Далее для каждой полученной части выполняетя тоже самое, до тех пор пока дробить части уже нельзя.
В конце мы получаем множество отсортированных частей, которые необходимо просто склеить в 1 целое.
Пример
  C#     Создаем новое C# консольное приложение... и напишем код
using System;

namespace ConsoleApplication1
{
     class Program
     {
          static public void QuickSort(int[] array, int left, int right)
          {
               int l = left;
               int r = right;

               // берем значение в центре массива
               int valueCenter = array[((l + r) / 2)];
               do
               {
                    while (array[l] < valueCenter)
                         ++l;
                    while (array[r] > valueCenter)
                         --r;
                    if (l <= r)
                    {
                         if (l < r)
                         {
                              // меняем местами array[l] и array[r]
                              int temp = array[l];
                              array[l] = array[r];
                              array[r] = temp;
                         }
                         ++l;
                         --r;
                    }
               }
               while (l <= r);

               // разбиваем на 2 промежутка
               if (left < r)
                    QuickSort(array, left, r);
               if (l < right)
                    QuickSort(array, l, right);
          }

          static void Main(string[] args)
          {
               // add values
               int[] values = { 10, 20, 5, 7, 13, 2 };

               // сортировка вставками
               QuickSort(values, 0, values.Length-1);

               // выводим значения на экран
               for (int i = 0; i < values.Length; i++)
                    Console.WriteLine(values[i]);

               // на экране увидим
               // 2
               // 5
               // 7
               // 10
               // 13
               // 20
          }
     }
}
На заметку!
Асимптотическая сложность алгоритма — способ оценки вычислительной сложности алгоритма «с точностью до константы».
Обычно записывается как О.

O(n^2) - такую сложность имеет алгоритм сортировки пузырьком.
Это называется квадратичная сложность

O(n * log(n)) - такую сложность имеет алгоритм быстрой сортировки.

log(n) это имеется в виду логарифм по основанию 2
 
← Предыдущая тема
Поиск в массиве
 
Следующая тема →
Графы
 
Ваши Отзывы ... комментарии ...
   
Вашe имя
Ваш комментарий (www ссылки может добавлять только залогиненный пользователь)

Экскурсии по Москве Экскурсии по Москве: пешеходные, автобусные и речные прогулки на любой вкус
Анонс! Ярмарка вакансий для молодежи, работа (учащихся, которые хотели бы подработать в свободное время, а также выпускники)|||Минск, Витебск, Гомель, Гродно, Могилев, Борисов, Полоцк, Брест, Барановичи, Пинск с 13 по 17 апреля 2026
  Объявления  
  Объявления  
 
Алгоритм пересечения прямоугольников
Поиск в массиве
Сортировка массива (алгоритмы)
Графы

  Ваши вопросы присылайте по почте: info@dir.by  
Яндекс.Метрика