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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 20:53   #1
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
Вопрос Через сортировку Шелла создать программу по убыванию

С помощью сортировки Шелла сделать программу по убыванию.Изначально числа не по порядку,в конченом результате,наоборот,должны быть по порядку.

на картинке отображено во возрастанию(но может кому то легче будет делать,опираясь на это)

13.JPG
Novenkaja вне форума Ответить с цитированием
Старый 29.03.2011, 21:09   #2
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Часто вместо вычисления последовательности во время каждого запуска процедуры, ее значения рассчитывают заранее и записывают в таблицу, которой пользуются, выбирая начальное приращение по тому же правилу: начинаем с inc[s-1], если 3*inc[s] > size
Код:
int increment(long inc[], long size) {
  int p1, p2, p3, s;

  p1 = p2 = p3 = 1;
  s = -1;
  do {
    if (++s % 2) {
      inc[s] = 8*p1 - 6*p2 + 1;
    } else {
      inc[s] = 9*p1 - 9*p3 + 1;
      p2 *= 2;
      p3 *= 2;
    }
	p1 *= 2;
  } while(3*inc[s] < size);  

  return s > 0 ? --s : 0;
}

template<class T>
void shellSort(T a[], long size) {
  long inc, i, j, seq[40];
  int s;

    s = increment(seq, size);
  while (s >= 0) {
		inc = seq[s--];

    for (i = inc; i < size; i++) {
      T temp = a[i];
      for (j = i-inc; (j >= 0) && (a[j] > temp); j -= inc)
        a[j+inc] = a[j];
      a[j+inc] = temp;
    }
  }
}

Последний раз редактировалось Летучий_СкилетиК; 29.03.2011 в 21:11.
Летучий_СкилетиК вне форума Ответить с цитированием
Старый 29.03.2011, 21:18   #3
Novenkaja
Форумчанин
 
Регистрация: 29.12.2010
Сообщений: 176
По умолчанию

я не совсем поняла твои слова.Ты имеешь ввиду,что эта таблица,что я приложила-её значения расчитаны заранее и вписаны в неё?

а что писать до
int increment(long inc[], long size) {
int p1, p2, p3, s; ???

и что значат твои { скобки???
Novenkaja вне форума Ответить с цитированием
Старый 29.03.2011, 21:34   #4
Летучий_СкилетиК
Форумчанин
 
Аватар для Летучий_СкилетиК
 
Регистрация: 04.02.2011
Сообщений: 260
По умолчанию

Цитата:
Сообщение от Novenkaja Посмотреть сообщение
я не совсем поняла твои слова.Ты имеешь ввиду,что эта таблица,что я приложила-её значения расчитаны заранее и вписаны в неё?

и что значат твои { скобки???
вот что я хотел сказать:
Сортировка Шелла является довольно интересной модификацией алгоритма сортировки простыми вставками.Вначале сортируем простыми вставками каждые 8 групп из 2-х элементов (a[0], a[8[), (a[1], a[9]), ... , (a[7], a[15],...)Потом сортируем каждую из четырех групп по 4 элемента (a[0], a[4], a[8], a[12]), ..., (a[3], a[7], a[11], a[15],...)Далее сортируем 2 группы по 8 элементов, начиная с (a[0], a[2], a[4], a[6], a[8], a[10], a[12], a[14])В конце сортируем вставками все 16 элементов.

{}а это структурные скобки в С
Летучий_СкилетиК вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Pascal] Создать программу после запуска которой только через 10 сек. отобразится форма Денис13 Помощь студентам 3 10.10.2010 21:26
Прогамма должна выполнять сортировку имен в лексикографическом порядке методом Хоора и Шелла. ser_b Помощь студентам 2 27.05.2010 21:26
как задать сортировку по убыванию? Барби Помощь студентам 3 08.10.2008 13:42
1. Сортировка Шелла по убыванию 2. Сортировка вставками по убыванию Arkuz Помощь студентам 1 25.09.2007 17:16