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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка с чередованием, отрицательных и положительных элементов 
V
    Опции темы
Redstuff
  Дата 16.4.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Отсортировать элементы массива (любым методом)  так, чтобы отрицательные эл-ты чередовались с положительными

Подскажите как лучше реализовать данную задачку? 
С самой сортировкой проблем нет, много готовых алгоритмов, но вот как подступиться к данной задачке не соображу  smile 


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
_hunter
Дата 16.4.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



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


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
betal
Дата 16.4.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(_hunter @  16.4.2007,  16:41 Найти цитируемый пост)
простейший способ:
сначала разносиш по двум массивам положительные и отрицательные числа. потом оба эти массива сортируеш, потом сливаеш (беря числа по-очереди из первого и из второго массивов)... 

точно smile

Добавлено через 4 минуты и 18 секунд
ну сортировка простейший способ помоему воть
Код

for (pass = 1; pass <=ArraySize - 1; pass++)
            for (i=0; i<=ArraySize - 2; i++)

    if(p1[i] < p1[i + 1])
        {
            hold = p1[i];
            p1[i]=p1[i + 1];
            p1[i + 1]=hold;
        }

Сортируешь массив "-" и "+" элементов а потом выводишь поочередно
 smile 
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
Redstuff
Дата 16.4.2007, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



А обойтись всего одним массивом?


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
_hunter
Дата 16.4.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

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



можно и одним -- посмотри какой число по модулю самое маленькое/большое (зависит от порядка сортировки) -- положительное или отрицательное и при сортировке ложи отрицательные числа на четные индексы, а положительные на нечетные (или наоборот)


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
betal
Дата 16.4.2007, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



если одним то можно через двойной цикл цикл
Код

//уже отсортированый массив метод см выше

for (int i=0; i<=ArraySize/2 ; i++)
{
 cout<<Mass[i];
 cout<<Mass[ArraySize-i];


примерно так  smile 
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
Redstuff
Дата 16.4.2007, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



betal, чото я мысли даже не улавливаю в твоем коде...


_hunter
Цитата

можно и одним -- посмотри какой число по модулю самое маленькое/большое (зависит от порядка сортировки) -- положительное или отрицательное и при сортировке ложи отрицательные числа на четные индексы, а положительные на нечетные (или наоборот)

интересно как это все сделать в 1 массиве? 1 массив всего, который дан.

Код


void sort_exchange(int a[], int n) {
    for(int i=0; i<n; ++i) {
        for(int j=0; j<n; ++j) 
            if(a[i]<a[j])
                swap(a[i],a[j]);
        
    }
}
void ror(int a[], int s, int f) {
    int temp = a[f];
    for (int i = f; f > s; f--)
        a[f] = a[f - 1];
        a[s] = temp;
 }

 void shift(int a[], int n) {
    sort_exchange(a,n); 
    int pluspos = 0;
        for (int i = 0; i < n; i++)
            if (a[i] > 0) {
                pluspos = i;
                break;
            }
            for (int i = 0; i<n-i; i++)
                ror(a, 2*i, i + pluspos);
}


Может поможете найти ошибку в функциях? С некоторыми массивами работает почти как надо...


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
betal
Дата 16.4.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



дай полностью код. smile 
И что тебе вообще нужно вывести поочереди ?????
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
fantast
Дата 16.4.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

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



написано под борланд
с учетом что положительных и отрицательных поравну

Код

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

#define size 6

void main()
{
clrscr();
int mass[size];
int i,k;
for(i=0;i<size;i++)
{printf("\nmass[%d]=",i);cin>>mass[i];}

int buf;
for(i=0;i<size;i+=2)
 if (mass[i]<0)
   for(k=1;k<size;k+=2)
     if (mass[k]>=0)
       {buf=mass[i];mass[i]=mass[k];mass[k]=buf;break;}


int min;
for(int t=0;t<2;t++)
for(i=t;i<size;i+=2)
    {min=i;for(k=i+2;k<size;k+=2) if(mass[k]<mass[min])min=k;
    buf=mass[min];mass[min]=mass[i];mass[i]=buf;}

for(i=0;i<size;i++)
cout<<mass[i]<<" ";
getch();


}



Это сообщение отредактировал(а) fantast - 16.4.2007, 23:08
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
betal
Дата 16.4.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(fantast @  16.4.2007,  23:07 Найти цитируемый пост)
написано под борланд
Или я устал под вечер и туплю или ...
Цитата


mass[0]=1

mass[1]=2

mass[2]=3

mass[3]=4

mass[4]=9

mass[5]=5
1 2 3 4 9 5 Press any key to continue




...или это не сортировка
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
fantast
Дата 16.4.2007, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

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



тупишь 8)

Цитата(fantast @  16.4.2007,  23:07 Найти цитируемый пост)
с учетом что положительных и отрицательных поравну


--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
powerfox
Дата 16.4.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I wanna fork()
****


Профиль
Группа: Комодератор
Сообщений: 3990
Регистрация: 1.10.2005
Где: Санкт-Петербург

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



Цитата(Redstuff @  16.4.2007,  17:31 Найти цитируемый пост)
Отсортировать элементы массива (любым методом)  так, чтобы отрицательные эл-ты чередовались с положительными

А с чего все взяли, что сортировать надо по увеличению/уменьшению? В контексте задачи это невозможно.
Нужно просто сделать это:
Цитата(_hunter @  16.4.2007,  19:36 Найти цитируемый пост)
и при сортировке ложи отрицательные числа на четные индексы, а положительные на нечетные (или наоборот) 




--------------------
user posted image
PM WWW   Вверх
betal
Дата 16.4.2007, 23:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(fantast @  16.4.2007,  23:24 Найти цитируемый пост)
тупишь 8)
а в чем же здесь сортировка ??? ))

Добавлено через 9 минут и 38 секунд
Цитата(Redstuff @  16.4.2007,  16:31 Найти цитируемый пост)
Отсортировать элементы массива (любым методом)  так, чтобы отрицательные эл-ты чередовались с положительными

Подскажите как лучше реализовать данную задачку? 
С самой сортировкой проблем нет, много готовых алгоритмов, но вот как подступиться к данной задачке не соображу  smile 

уточни плз задание сортировать нуно только "+" и "-" а возрастание, убывание ??? Разность ???
Бо тут у нас некий спор возник smile 
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
fantast
Дата 16.4.2007, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 10.12.2006
Где: минск, столица на шей Родины

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



если положительных чисел и отрицацельных  будет поровну то прога их и разложет их чередуя и отсортирует
--------------------
Эпитафия: Он старался.                                   Неизвестный
PM MAIL   Вверх
betal
Дата 16.4.2007, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(fantast @  16.4.2007,  23:53 Найти цитируемый пост)
если положительных чисел и отрицацельных  будет поровну то прога их и разложет их чередуя и отсортирует 
 smile я понял как работает Ваша програма.
Хотелось бы уточнить чего хотять от нас....
 smile 

--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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