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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка "хитрая", не получается правильно орг. цикл  
:(
    Опции темы
Oygen
Дата 3.8.2009, 08:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, в начале объясню для чего эта программа. В этой программе сортировки в исходном массиве в начале
выбираются элементы расположенные в порядке возрастания и переносятся в выходной массив, а их места в исходном массиве заменяются на -1, затем оставшиеся элементы включаются в полученную упорядоченную последовательность
методом погружения. На промежуточном этапе застрял, не получается перенести оставшиеся элементы, почему-то переносится только последний 50 шесть раз, а не 12,21,10,8,45,50 как должно быть.

Заранее благодарен.


Код

#include<stdio.h>
#include<iostream.h>

int amax,imax;
void sort(int n);

int enter[10]={39,12,41,21,53,10,8,45,60,50};//входной массив
int exit[10];// выходной массив
int main()
{
    


sort(10);

for(int i=0;i<10;i++)
printf("enter[%d]= %d exit[%d]= %d \n",i,enter[i],i,exit[i]);

printf("\n");

return 0;
}


void sort(int n)
int t=0;

amax=enter[0];
exit[0]=amax;
for(int i=0;i<n;i++)
{
imax=i;
amax=enter[0];
exit[0]=amax;
for(int i=0;i<n;i++)
{
imax=i;

for(int j=i+1;j<n;j++)

if(enter[j]>amax)
{
 t++;    
exit[t]=enter[j];
enter[imax]=-1;
amax=enter[j];
imax=j;
enter[imax]=-1;
}

}

for(i=0;i<n;i++)
{
if(enter[i]!=-1)
printf("i=%d\n",i);
for(t=4;t<n;t++)
{
exit[t]=enter[i];
printf("t=%d\n",t);
}
}


}



Это сообщение отредактировал(а) Oygen - 3.8.2009, 09:57
PM MAIL   Вверх
zim22
Дата 3.8.2009, 08:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Oygen @  3.8.2009,  08:05 Найти цитируемый пост)
//программа "хитрой" сортировки

хитрая == плохая. сделайте её простой.
***
и исходник в теги КОД поместите. и код отформатируйте.
так у вас будет больше шансов на ответ. 

Это сообщение отредактировал(а) zim22 - 3.8.2009, 08:17


--------------------
PM MAIL   Вверх
InvalidProperty
Дата 3.8.2009, 08:39 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



во-первых, ничего хитрого не вижу. первая часть похожа на пузырек с тем лишь извращением, что ты используешь дополнительный массив. Вторая часть - суть бессмыслица. Во-вторых, запусти в отладчике с точкой останова во внутреннем цикле первого фрагмента и поймешь, почему у тебя не работает.

ЗЫ ты участвуешь в конкурсе на саму нелепую сортировку? почитай литературу. Не нужно изобретать велосипед


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
azesmcar
Дата 3.8.2009, 08:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Oygen @  3.8.2009,  08:05 Найти цитируемый пост)
В этой программе сортировки в исходном массиве в начале
выбираются элементы расположенные в порядке возрастания и переносятся в выходной массив, а их места в исходном массиве заменяются на -1, затем оставшиеся элементы включаются в полученную упорядоченную последовательность
методом погружения.

Какой ужас. Кто такой алгоритм придумал? У кого-то бурное воображение smile 
PM   Вверх
Oygen
Дата 3.8.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, друзья за ваши отзывы, но сами понимаете, что у "новичков " не спрашивают что они хотят делать, а дают задание и будь добр выполни. Все как в армии, сказал тебе старшина таскать 
"люминий", значит это-люминий.
PM MAIL   Вверх
azesmcar
Дата 3.8.2009, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(Oygen @  3.8.2009,  09:18 Найти цитируемый пост)
Спасибо, друзья за ваши отзывы, но сами понимаете, что у "новичков " не спрашивают что они хотят делать, а дают задание и будь добр выполни. Все как в армии, сказал тебе старшина таскать 
"люминий", значит это-люминий. 

Так тебе что, сказали так реализовать или это ты придумал? Почему-то мне кажется что этот алгоритм ты сам придумал smile 
http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%...%B2%D0%BA%D0%B8

вот посмотри, тут есть все реализации практически всех алгоритмов сортировки. Если все же хочешь исправить свой код, тогда приведи его в порядок. Оформляй тегами Код, а то читать невозможно.
PM   Вверх
Oygen
Дата 3.8.2009, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день, алгоритм данной сортировки я получил из задания и вот пытаюсь его реализовать в 
коде. У меня пока получилось, конечно хоть и криво-перенести в выходной массив элементы, рас-
положенные по возрастанию из входного массива, т.е.39,41,53,60 и заменить их во входном на -1.
А вот перенести и расположить позади них остальные не получается, не могу разобраться с последним циклом.Пытаюсь, но как говорил один киногерой:"...я не волшебник, я еще, только учусь".
PM MAIL   Вверх
zim22
Дата 3.8.2009, 10:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Oygen @  3.8.2009,  10:18 Найти цитируемый пост)
не могу разобраться с последним циклом.

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

Это сообщение отредактировал(а) zim22 - 3.8.2009, 10:41


--------------------
PM MAIL   Вверх
Oygen
Дата 3.8.2009, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(zim22 @ 3.8.2009,  10:35)
Цитата(Oygen @  3.8.2009,  10:18 Найти цитируемый пост)
не могу разобраться с последним циклом.

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

Да, это моя реализация указанного алгоритма и я готов нести ответственность.
Но если вы посмотрите результат выполнения программы, то увидите, что он не отвечает
здравому смыслу (и я не пойму почему это происходит), поэтому и обращаюсь к знатокам.
PM MAIL   Вверх
mes
Дата 3.8.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

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



Цитата(Oygen @  3.8.2009,  10:59 Найти цитируемый пост)
Да, это моя реализация указанного алгоритма и я готов нести ответственность.

тогда скажите что делает этот участок кода построчно :

Цитата(Oygen @  3.8.2009,  07:05 Найти цитируемый пост)
for(i=0;i<n;i++)
{
if(enter[i]!=-1)
printf("i=%d\n",i);
for(t=4;t<n;t++)
{
exit[t]=enter[i];
printf("t=%d\n",t);
}
}


Добавлено через 45 секунд
P.S. к этому замечанию
Цитата(azesmcar @  3.8.2009,  08:23 Найти цитируемый пост)
Если все же хочешь исправить свой код, тогда приведи его в порядок.

Вы прислушались лишь наполовину.
 smile 



--------------------
PM MAIL WWW   Вверх
zim22
Дата 3.8.2009, 12:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

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



Цитата(Oygen @  3.8.2009,  11:59 Найти цитируемый пост)
Да, это моя реализация указанного алгоритма и я готов нести ответственность.

отфматирйтекоднево
зможночитАть,Иливыизде,ваетесьь?


--------------------
PM MAIL   Вверх
Oygen
Дата 3.8.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(zim22 @ 3.8.2009,  12:12)
Цитата(Oygen @  3.8.2009,  11:59 Найти цитируемый пост)
Да, это моя реализация указанного алгоритма и я готов нести ответственность.

отфматирйтекоднево
зможночитАть,Иливыизде,ваетесьь?

Спасибо, друзья общими усилиями получилось, в основном код с задачей справляется.
Вот то что я добивался.
Код
#include<stdio.h>

void sort(int n);
void swap(int *p1,int *p2);
int enter[10]={39,12,41,21,53,10,8,45,60,50};
int exit[10];

int main()
{
   int k;
   printf("Neotsortirovaniy massiv\n");
   for(k = 0; k < 10; ++k)   //префиксная форма предпочтительней там, где не нужна функциональность постфиксной
      printf("%d ",enter[k]);
   printf("\n\n");
   sort(10);
   printf("Otsortirovaniy massiv \n");
   for(int i = 0; i < 10; ++i)
      printf("%d ", exit[i]);
   printf("\n\n");
   return 0;
}


void sort(int n) 
{
   int amax, imax, t = 0;
   amax = enter[0];
   exit[0] = amax;
   for(int i = 0; i < n; ++i)
   {
       imax = i;
       for(int j = i + 1; j < n; ++j)
          if(enter[j] > amax)
          {
             ++t;    
             exit[t] = enter[j];
             enter[imax] = -1;
             amax = enter[j];
             imax = j;
             enter[imax] = -1;
          }
   }

   for(i = 0; i < n; ++i)
   {
      if(enter[i] != -1)
      {
          ++t;
          exit[t] = enter[i];
          enter[i] = -1;
      }
   }

// вставка погружением
   for(i = 0; i < n - t; ++i)
   {
      for(t = i + t; t > 0; --t)
      {
         if(exit[t] < exit[t - 1]) 
            swap(&exit[t], &exit[t - 1]);
      }    
   }
}


void swap(int *p1, int *p2)
{
   int temp = *p1;
   *p1 = *p2;
   *p2 = temp;
}


Модератор: Отформатировал код за тебя, в следующий раз делай сам так же

 ! 
bsa
Прежде чем отправлять сообщение, не поленись нажать на "Предварительный просмотр"


Это сообщение отредактировал(а) bsa - 3.8.2009, 17:17
PM MAIL   Вверх
InvalidProperty
Дата 3.8.2009, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 356
Регистрация: 31.10.2007
Где: Россия, Казань

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



лол smile

Добавлено @ 16:41
особенно радует, что тег код был вставлен в нужное место smile

Добавлено @ 16:43
форматирование прямо как у Маяковского, кстати сказать

Это сообщение отредактировал(а) InvalidProperty - 3.8.2009, 16:43


--------------------
dd if=$0 of=$0 bs=1 count=76 seek=`du -b $0 | awk {'print $1'}` 2>/dev/null
dd if=$0 of=$0 bs=1 count=67 conv=notrunc oflag=append 2>/dev/null
echo $0 >> $0
PM MAIL ICQ Jabber   Вверх
Oygen
Дата 3.8.2009, 17:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо, друг, век не забуду. Давил я и на "предварительный просмотр", пробовал три раза , но
код почему-то так и не встал куда надо и не получилось как у тебя (чувствуется опыт).
PM MAIL   Вверх
bsa
Дата 3.8.2009, 17:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

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



Цитата(Oygen @ 3.8.2009,  17:39)
код почему-то так и не встал куда надо и не получилось как у тебя (чувствуется опыт).

Форматирование кода делается вручную. Не надо делать лесенки "от балды" или "для красоты". Отступ делается только после входа внутрь блока ({} или if,for,while,do...).
Размещение тега CODE вообще труда не составляет. перед скоим кодом пишешь [ CODE=cpp], а после - [ /CODE] (только пробелы не надо делать внутри квадратных скобок). Новички эту технику осваивают с первого раза, за редким исключением.
Если интересно, нажни на ссылку "редактировать" над тем постом и посмотри, что я изменил.

Это сообщение отредактировал(а) bsa - 3.8.2009, 17:51
PM   Вверх
andrew_121
Дата 3.8.2009, 18:25 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

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



Цитата(bsa @  3.8.2009,  17:49 Найти цитируемый пост)
Новички эту технику осваивают с первого раза, за редким исключением.

 smile 


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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