Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.11.2009, 20:37   #1
Pti44ka
Пользователь
 
Аватар для Pti44ka
 
Регистрация: 02.09.2009
Сообщений: 56
По умолчанию Сортировка вставками

Нужно написать программу для сортировки чисел методом вставки. Я нашла алгоритм и пробую его немного переделать и понять. Вот код,который я нашла в интернете:
Код:
template <class T>
void InsertionSort(T A[], int n)
{
  int i, j;
  T temp;

  // i определяет подсписок A[0]...A[i]
for (i=1; i<n; i++)
  {
    // индекс j пробегает вниз по списку от A[i] в процессе
    // поиска правильной позиции вставляемого значения
    j = i;
    temp = A[i];
    // обнаружить подходящую позицию для вставки, сканируя подсписок,
    // пока temp < A[j-1] или пока не встретится начало списка
    while (j > 0 && temp < A[j-1])
    {
      // сдвинуть элементы вправо, чтобы освободить место для вставки
      A[j] = A[j-1];
      j--;
    }
    // точка вставки найдена; вставить temp
    A[j] = temp;
  }
}
Подскажите,пожалуйста,почему строке "for (i=1; i<n; i++)" мы начинаем считать от i=1,а не от i=0??

Последний раз редактировалось Stilet; 17.11.2009 в 08:37.
Pti44ka вне форума Ответить с цитированием
Старый 16.11.2009, 21:13   #2
Secc
Пользователь
 
Аватар для Secc
 
Регистрация: 19.10.2009
Сообщений: 30
По умолчанию

метод вставки заключается в след.
начинается со второго и тд..( вот почему i=1) проверка и все числа сраниваются с этим (с которого была начата проверка) .. Если меньше(по возростнию) то элементы двигаются вправо а тот становится на свободное место.

Код:
  //по возростанию 
for (int M=1; M<N; M++)
        {
               x=A[M];     
               k=M-1;      

               while ( A[k]>x && k>=0 )
                k--;

                k++;

              for (int p=M-1; p>=k; p--)
              A[p+1]=A[p];

            A[k]=x;

        }
Для понимания советую написать на бумажке массив беспорядочно и проделать все операции в соответствии с алгоритмом.Хоть это и нудно но зато когда проделаете результат будет
Спасибо! Кэп!!
FORZA LAZIO e NON MOLLARE MAI !!

Последний раз редактировалось Stilet; 17.11.2009 в 08:38.
Secc вне форума Ответить с цитированием
Старый 17.11.2009, 16:41   #3
Pti44ka
Пользователь
 
Аватар для Pti44ka
 
Регистрация: 02.09.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от Secc Посмотреть сообщение
метод вставки заключается в след.
начинается со второго и тд..( вот почему i=1) проверка и все числа сраниваются с этим (с которого была начата проверка) .. Если меньше(по возростнию) то элементы двигаются вправо а тот становится на свободное место.

Код:
  //по возростанию 
for (int M=1; M<N; M++)
        {
               x=A[M];     
               k=M-1;      

               while ( A[k]>x && k>=0 )
                k--;

                k++;

              for (int p=M-1; p>=k; p--)
              A[p+1]=A[p];

            A[k]=x;

        }
Для понимания советую написать на бумажке массив беспорядочно и проделать все операции в соответствии с алгоритмом.Хоть это и нудно но зато когда проделаете результат будет
Когда я пытаюсь реализовать код,то у меня получается ошибка - выход за границы массива. А если я вот ставлю for (int M=1; M<N-1; M++),то такая ошибка пропадает. Не пойму почему вот нужно отнимать в условии цикла 1 от длины массива(((
Pti44ka вне форума Ответить с цитированием
Старый 17.11.2009, 16:49   #4
Secc
Пользователь
 
Аватар для Secc
 
Регистрация: 19.10.2009
Сообщений: 30
По умолчанию

если вы при вводе елементов массива используете следующий код , тогда знаю причину
Код:
 for (int k=1; k<N; k++)
        cin>>A[k];
Вы вводите на один элемент меньше чем думате тк номера позиций элементов начинаются с 0.
Спасибо! Кэп!!
FORZA LAZIO e NON MOLLARE MAI !!
Secc вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка вставками двухмерного массива ponchikpk Помощь студентам 6 09.03.2009 13:34
Сортировка вставками глючит... Arkuz Общие вопросы Delphi 1 01.10.2007 21:44
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16