воскресенье, 12 сентября 2010 г.

Сортировка выбором(Selection_sort)

[Все сортировки]

Теория: Общая информация изложена здесь

Практика
: informatics.mccme.ru

Визуализатор: rain.ifmo.ru  [Java]

Реализация
:
  1. void selection_sort(vector<int> &mas)
  2. {
  3.   for (int i=0;i<mas.size();i++)
  4.     for (int j=i+1;j<mas.size();j++)
  5.       if (mas[i]>mas[j])
  6.         swap(mas[i],mas[j]);
  7. }
* This source code was highlighted with Source Code Highlighter.

UPD[29.09.2011]

  1. void selection_sort(vector<int> &mas) {
  2.   for(int i=0;i<mas.size();i++) {
  3.     int minPos = i;
  4.     for(int j=i+1;j<mas.size();j++)
  5.       if(mas[minPos] > mas[j])
  6.         minPos = j;
  7.     swap(mas[minPos],mas[i]);
  8.   }
  9. }
* This source code was highlighted with Source Code Highlighter.

P.S: Из всех квадратичных сортировок сортировка выбором имеет самую локаничную запись и сложность O(n*(n-1)/2). Вот почему, мне она нравится больше других квадратичных сортировок)

2 комментария:

  1. Это не сортировка выбором.

    ОтветитьУдалить
  2. Первая реализация использует принцип сортировки выбором. При этом она имеет локаничную запись, но выполняет лишние обмены. Думаю вторая реализация Вам больше понравится.

    Объясню почему мне нравится первая реализация.
    Во-первых, она пишется в 4 строчки.
    Во-вторых, лишние обмены не приведут к значительному замедлению программы, т.к. количество объектов в массиве будет ограничено разумным числом. (1000 например).
    В-третьих, если размеры элементов велики и операция swap являтся тяжеловесной, то всегда можно сортировать не сами объекты, а указатели на них.

    ОтветитьУдалить