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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортирование в массиве (Алгоритм), найдите ошибку 
V
    Опции темы
Sergio
Дата 18.10.2006, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Здраствуйте. Написал прогу, которая сортируэт индексы массивов (от наибольшего до найменшего).

Вот код: 
Код
int A[5]= {1,2,3,4,5};
int max;
max = A[0];
int y;
 for (int x=0; x<5; x++)
  {
   for (y=x; y<5; y++)
    {
     if (A[y]>=max)
      {
       A[x]=A[y]-A[x];
        A[y]=A[y]-A[x];
         A[x]=A[x]+A[y];
          max=A[x+1];
           y=5;
      }
     cout<<A[x]<<" ";
    }
  }
 getch(); 


Мне на экран выводит все нули.
PM MAIL ICQ   Вверх
JackYF
Дата 18.10.2006, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Что она сортирует? Индексы? Этот как? и зачем инструкция
Код

y = 5?

Ты хотел сказать
Код

break;
?

И причем тут максимальный элемент?

Короче, расскажи по порядку задачу: что на входе программы, что должно быть на выходе...

Добавлено @ 19:34 
Да, кстати. И инструкция
Код

max=A[x+1];


Может выйти за пределы массива, если x=4.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Sergio
Дата 18.10.2006, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



Розказую. У меня эсть какой-нибудь одновымерный массив. И индксы массыва посортировать от максимально до минимального. Например если в нас на входе A[5]={5,3,8,6,2}, то на выходе должно быть A[5]={8,6,5,3,2}. 

Вот и всё. 

P.S.  
Код
y = 5?


Имелось ввиду остановить цыкл.
PM MAIL ICQ   Вверх
JackYF
Дата 18.10.2006, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

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



Задача понятна.

Так вот: делается это двумя проходами, однако что-то у тебя слишком запутано. Приблизительно так:
Код

const int N = 5;
for ( int i = N; i >= 1; --i)
  for ( int j = 1; j < i; ++j )
  {
    if ( A[j-1] < A[j] )
    {
      std::swap( A[j-1], A[j] );
    }
  }

Приблизительно так. Это классическая пузырьковая сортировка.

Добавлено @ 20:11 
Да, и еще. То, что ты хочешь сортировать по убыванию, называется элементами, а не индексами.
Индекс - это положение элемента в массиве.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Sergio
Дата 18.10.2006, 22:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



что такое std::swap

Я уже знаю  smile 

Это сообщение отредактировал(а) Sergio - 18.10.2006, 23:49
PM MAIL ICQ   Вверх
Sergio
Дата 18.10.2006, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



JackYF, Помоги розобратся с кодом что ты написал...
PM MAIL ICQ   Вверх
EvgenZ
Дата 19.10.2006, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


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

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



const int N = 5;
for ( int i = N; i >= 1; --i)
  for ( int j = 1; j < i; ++j )
  {
    if ( A[j-1] < A[j] )
    {
      std::swap( A[j-1], A[j] );
    }
  }


заместо того чтобы в программе писать писать какое-то одно значение (в данном случае N) пишется константа, т.е. в место гед написанно N  компилятор видит 5 - это уудобно для изменения и наглядно. Так как незачем сравнивать первый элемент сам с собой j = 1; и по проходу цикла последний элемент у тебя будет автоматом "вытолкнут" на верх -> можно убрать еще одну итерацию.
 в цикле смотрится, если предыдущий элемент больше нынешнего, то вызывается функция свап которая меняет местами переданные ей аргументы.

З.Ы. ну ты в своей проге и намудрил  smile 


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
Sergio
Дата 19.10.2006, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 843
Регистрация: 28.7.2006
Где: Solar System-> Earth

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



EvgenZ, я же не знал , что есть такая замечательная функция как swap()  smile 
Всем спасибо. Тема закрыта.
PM MAIL ICQ   Вверх
EvgenZ
Дата 19.10.2006, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Freedom in me
**


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

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



Sergio, да свап тут даже не причем... можно было и через третью переменную сделать без гемора...  smile 


--------------------
<удалено администрацией форума>
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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