Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка двоичной вставкой. Вопрос к знатокам.  
:(
    Опции темы
iDeus
Дата 3.12.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Deus vult
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 5.6.2008
Где: Vladivostok

Репутация: нет
Всего: нет



Доброго времени суток, уважаемые знатоки.

Необходима Ваша помощь в реализации метода сортировки. 

При решении задачи:

Провести сравнительный анализ эффективности следующих методов сортировки:
1)    линейный выбор с обменом, челночная сортировка, двоичная вставка;
2)    сортировка Шелла, центрированная вставка;
3)    стандартный обмен, быстрая сортировка, линейная вставка.
Предлагаемый тест: сортировка целочисленного массива размера n, элементы которого - случайные величины, распределенные в интервале (0, N-1).


возникла проблема. Не получается найти более менее вменяемого объяснения принципов сортировки двоичной вставкой, и примеров реализации.  

Первый сегмент, в котором необходимо так же реализовать метод двоичной вставки я решил так:


Код

/**/
_1: system("cls");
  reset(A,A_backup,n);    
  printf("Линейный выбор с обменом.\n-------------------\nИсходный массив:\n");
  show(A,n);
/**/ 
  j=0;
  index=-1;
  koof[0]=0;
  perest[0]=0;
  for(j=0;j!=n;j++)
    {
      min_=16000;
      for(int i=j;i<n;i++)
        {
          if(A[i]<min_)
            {
              min_=A[i];
              index=i;
            }
          koof[0]++;  
        }
      if(index!=-1)
        {  
          buf=A[j];
          A[j]=A[index];
          A[index]=buf; 
          perest[0]++;
        } 
    }
  printf("Отсортированный массив:\n");  
  show(A,n);
  printf("\nПроверок - %d  Перестановок - %d\n",koof[0],perest[0]);
/**/
  reset(A,A_backup,n);                    //восстановление массива
  printf("\nЧелночная сортировка.\n-------------------\nИсходный массив:\n");
  show(A,n);
/**/
  koof[1]=0;
  perest[1]=0;
  k=n-1;
  // границы неотсортированной части массива
  niz=1;
  verh=n-1; 
  do
    {                       
      for (j=niz;j<=verh;j++)
        {
          koof[1]++;
          if (A[j-1]>A[j])
            {
              swap(A,j-1,j);
              perest[1]++;
              k=j;                       
            }
        }
      verh=k-1;         
        for (j=verh;j>=niz;j--)
        {
          koof[1]++;
          if (A[j-1]>A[j])
            {
              swap(A,j-1,j);
              perest[1]++;
              k=j;
            }
        }
      niz=k+1;
    } while (niz<verh); // если низ и верх встретятся - сортировка закончена
  printf("Отсортированный массив:\n");   
  show(A,n);
  printf("\nПроверок - %d  Перестановок - %d\n",koof[1],perest[1]);
/**/
  reset(A,A_backup,n);                    //восстановление массива
  printf("\nДвоичная вставка.\n-------------------\nИсходный массив:\n");
  show(A,n);
/**/
  koof[2]=0;
  perest[2]=0;
  //
  //   двоичная вставка
  //   двоичная вставка
  //   двоичная вставка
  //   двоичная вставка
  //
  //
  printf("Отсортированный массив:\n");   
  show(A,n);
  printf("\nПроверок - %d  Перестановок - %d\n",koof[2],perest[2]);
  getch();
  goto end;
/**/


  Пользовался ли кто-нибудь этим способом сортировки? Каков его принцип? Ну и было бы просто замечательно взглянуть на пример реализации. 

Заранее большое спасибо за помощь. 
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0724 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.