Модераторы: 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   Вверх
S.A.P.
Дата 17.4.2007, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



я бы сортировал путём подмены стандартного условия. Если это C++, то выглядеть всё будет так:
Код

#include <list>
#include <iostream>

using namespace std;
class cond
{
    public:
    bool operator() (const int a, const int b)
    {
        return abs(a) < abs(b);
    }
} cond1;

int main()
{
    list<int> list1;

    list1.push_back(-20);
    list1.push_back(10);
    list1.push_back(30);
    
    list1.sort(cond1);
}

PM MAIL   Вверх
fantast
Дата 17.4.2007, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



это уже наверно не сегодня 8)

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



****


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

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



S.A.P., не факт, что после этого отрицательные и положительные будут чередоваться. 
например
Код

  list1.push_back(-20);
    list1.push_back(10);
    list1.push_back(30);
    list1.push_back(-20);
    list1.push_back(10);
    list1.push_back(30);

  
PM MAIL   Вверх
S.A.P.
Дата 17.4.2007, 00:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



zkv, насколько я понял, автору нужна сортировка по абсолютным значениям, в противном случае задача не имеет смысла. Поправьте если не прав.
PM MAIL   Вверх
zkv
Дата 17.4.2007, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(S.A.P. @  17.4.2007,  00:19 Найти цитируемый пост)
zkv, насколько я понял, автору нужна сортировка по абсолютным значениям, в противном случае задача не имеет смысла. Поправьте если не прав. 

S.A.P., возможно вы правильно поняли автора, а я нет. Вообще автора трудно понять.  
Я решил, что поджножества отрицательных и положительных чисел должны быть сначала упорядочены по отдельности, а потом слиты в один массив, такой вывод можно сделать из рассуждений выше. 
Зачем понадобилось решать такую задачу? Не знаю, этот вопрос уже не ко мне, возможно какой то смысл в этом есть, не знаю.  smile 
PM MAIL   Вверх
Dov
Дата 17.4.2007, 07:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



В таких случаях аффтар должен приводить пример:
исходный массив: ... такой-то...
результат должен быть: ... такой-то...  
И всё было бы понятно с самого первого поста.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
betal
Дата 17.4.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(zkv @  17.4.2007,  01:18 Найти цитируемый пост)
S.A.P., возможно вы правильно поняли автора, а я нет. Вообще автора трудно понять.  
Я решил, что поджножества отрицательных и положительных чисел должны быть сначала упорядочены по отдельности, а потом слиты в один массив, такой вывод можно сделать из рассуждений выше. 
Зачем понадобилось решать такую задачу? Не знаю, этот вопрос уже не ко мне, возможно какой то смысл в этом есть, не знаю.  smile  

Я тоже так понял. Но потом мнение в теме разделились.
Да и Афтар кудат пропал....
Цитата(Dov @  17.4.2007,  07:32 Найти цитируемый пост)
В таких случаях аффтар должен приводить пример:
исходный массив: ... такой-то...
результат должен быть: ... такой-то...  
И всё было бы понятно с самого первого поста.  smile 

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


Команда REDSTUFF
**


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

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



Да пример зря чувстую не привел, моя вина

Например дано:
1 2 3 4 -7 100 -8 -11 500
Получить:
1 -11 2 -8 3 -7 4 100 500 

Формулировку задачи я переписал в том виде, котором нам дал преподователь.

fantast, в задании не указано равное или не равное кол-во, так что не подходит.
Тоже ведь массив с отриц. и полож. ) :
Дано: 1 2 3 4 -7 100
Рез-ат: 1 -7 2 4 3 100


Это сообщение отредактировал(а) Redstuff - 17.4.2007, 09:50


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


Бывалый
*


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

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



Цитата(Redstuff @  17.4.2007,  09:31 Найти цитируемый пост)
fantast, в твоем алгоритме допускает ошибку при таком массиве:
Дано: 1 2 3 4 -7 100
Рез-ат: 1 -7 2 4 3 100

А я ему уже говорил. 
Redstuff
Ладно значит я правильно понял идею. И то что я выше описывал значит так и есть. Но раз ты не уловил суть е то я щас те попробую рассписать
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
betal
Дата 17.4.2007, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ну смотри у тебя есть уже массив 
допустим
Цитата

9       -2     5      0      3

осортировали и получили
Цитата

9         5      3       0        -2

теперь выбираем елементы первый с начала последниы с конца
Где положительные будут прокручиваться i=0;i<n/2;i++
а отрицательные
n-i;
Воть и вся идея. Это конечно не оптимизированый код нокак вариант
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
betal
Дата 17.4.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



воть примерно что у меня вышло
Код

/*20 */
# include <stdio.h>
# include <conio.h>
#include <iostream.h>
int Sozd(int *B,int n)
{
for (int i=0; i<n; i++)
scanf("%d",&B[i]);
return*B;
}

int sort_10(int c[],int n)
{ int hold;
//----------=)
for (int pass = 1; pass <=n - 1; pass++)
            for (int i=0; i<=n - 2; i++)
    if(c[i] < c[i + 1])
        {
            hold = c[i];
            c[i]=c[i + 1];
            c[i + 1]=hold;
        }
return *c;
}
void vuvod(int *j,int n)
{printf("\n");
for (int i=0; i<n; i++)
{
printf("%5.1d",j[i]);
}
cout<< "\n";
}

void main() 
{int n;
printf("\t\t razmer Vector A = \n");
scanf("%d",&n);
 
int *A = new int [n];
printf("\t\t Vector A\n");
cout<<"\n";
*A=Sozd(A,n);

//
*A=sort_10(A,n);
cout<<"\n";
vuvod(A,n);
int *B = new int [n];
int j=0;

for (int i=0; i<n/2; i++)
{
    B[j]=A[i];
    
    B[j+1]=A[n-i-1];
    j=j+2;

}
if(n%2!=0)
int ttt=n/2+1;
//B[n]=A[n/2+1];
//printf("A[n/2+1] = %5.1d",A[ttt]);
vuvod(B,n);
delete []A;

}



только у меня не выходил получить доступ к последнему элементу ну думаю это уже не проблема
Цитата
                 razmer Vector A =
6
                 Vector A
9
-2
0
3
4
100

  100    9    4    3    0   -2
  100   -2    9    0    4    3



Press any key to continue






но если непарное N то выходит такая лажа
Цитата
                 razmer Vector A =
5
                 Vector A
9
-2
0
3
5

    9    5    3    0   -2
    9   -2    5    0-842150451



Press any key to continue





Добавлено через 1 минуту и 22 секунды
Но повторяю это не оптимизированый код. Но ним я выразил свою мысль... 
Так что не судите строго
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
fantast
Дата 17.4.2007, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



тогда может так, извеняюсь за слабую читабельность кода 8)
Код
#include <iostream.h>
#include <stdio.h>
#include <conio.h>
#include <values.h>

#define size 6

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

int buf=0,min;

for(i=0;i<size;i++)
if (mass[i]>=0) buf++;
//////////////////////////////////////////////////////////
if(buf<(size-buf))
{
    for(i=0;i<size;i+=2)
      for(k=0;k<size;k++)
        { if(!( mass[k]>=0 && ((k%2) || (k>i)) )) continue;
          buf=mass[k];mass[k]=mass[i];mass[i]=buf; }
}
else
{
       for(i=0;i<size;i+=2)
      for(k=0;k<size;k++)
        { if(!( mass[k]<0 && ((k%2) || (k>i)) )) continue;
          buf=mass[k];mass[k]=mass[i];mass[i]=buf; }
}
////////////////////////////////////////////////////////////////
for (i=0;i<size;i++)  if(mass[i]>=0)
  { for(min=k=i;k<size;k++) if(mass[min]>mass[k] && mass[k]>=0) min=k;
     buf=mass[min];mass[min]=mass[i];mass[i]=buf;}
for (i=0;i<size;i++)  if(mass[i]<0)
  { for(min=k=i;k<size;k++) if(mass[min]>mass[k]) min=k;
     buf=mass[min];mass[min]=mass[i];mass[i]=buf;}
///////////////////////////////////////////////////////////////

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


}



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


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Идея такая...
Сортировку делать не нужно. 
Идём по массиву.
1. Ищем минимальный элемент среди оставшихся(если текущий индекс чётный, то только среди    положительных).
2. Меняем его местами с текущим элементом.
3. Переходим на следующий элемент.
И так до конца массива.
Всё. 
Код
#include<iostream.h>
#include<iomanip.h>
#include<limits.h>

int minElem(int* ar, int beg, int size)
{
    int min = INT_MAX;
    int ind = beg;
    
    for(int i = beg; i < size; i++)
    {
        if((beg % 2 == 0) && (ar[i] < 0))
            continue;
          
        if(ar[i] < min)
        {
            min = ar[i];
            ind = i;
        }        
    }
    
    return ind;
}

void swap(int& a, int& b)
{
    int tmp;
    
    tmp = a;
    a   = b;
    b   = tmp;
}

int main()
{
    int arr[] = {5, 2, -4, -6, 9, 4, -2, 0, -4, 6, 5, 2, 1};
    int size  = sizeof(arr) / sizeof(arr[0]);
    int i;
    
    for(i = 0; i < size; i++)
        cout << setw(4) << arr[i];
    cout << endl;    
    
    for(i = 0; i < size - 1; i++)
        swap(arr[i], arr[minElem(arr, i, size)]);
        
    for(i = 0; i < size; i++)
        cout << setw(4) << arr[i];
    cout << endl;    
   
   return 0;    
}

 

Это сообщение отредактировал(а) Dov - 17.4.2007, 16:08


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
betal
Дата 17.4.2007, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Интерестно
а если у меня на setw(4) компелятор ругается ? smile 
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
zkv
Дата 17.4.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


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

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



Цитата(betal @  17.4.2007,  14:48 Найти цитируемый пост)
а если у меня на setw(4) компелятор ругается ?

как ругается? iomanip подключен? 
PM MAIL   Вверх
betal
Дата 17.4.2007, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(zkv @  17.4.2007,  14:56 Найти цитируемый пост)
как ругается? iomanip подключен?  

упсь  smile 
Цитата

   5   2  -4  -6   9   4  -2   0  -4   6   5   2   1
   0  -6   1  -4   2  -4   2  -2   4   5   5   6   9
Press any key to continue

Насколько я правильно понял задание то опять неувязочка выходит. smile 
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
Dov
Дата 17.4.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(betal @  17.4.2007,  15:00 Найти цитируемый пост)
Насколько я правильно понял задание то опять неувязочка выходит

Не говорите загадками, вы меня изводите.  smile

Добавлено через 5 минут и 6 секунд
Цитата(zkv @  17.4.2007,  14:56 Найти цитируемый пост)
iomanip подключен? 

Извиняюсь, исправил в коде.



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
betal
Дата 17.4.2007, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Dov да я по поводу сортировки здесь выходит 
Цитата


   5   2  -4  -6   9   4  -2   0  -4   6   5   2   1
   0  -6   1  -4   2  -4   2  -2   4   5   5   6   9

а должно
Цитата

   9    6    5    5    4    2    2    1    0   -2   -4   -4   -6
   9   -6    6   -4    5   -4    5   -2    4    0    2    1     2

а у моя версия делает 
Цитата

   9    6    5    5    4    2    2    1    0   -2   -4   -4   -6
   9   -6    6   -4    5   -4    5   -2    4    0    2    1-842150451

от такая загагулина smile 
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
Dov
Дата 17.4.2007, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



betal, у меня всё, как просил афтар. Сортирует по возрастанию.  smile 

Цитата(Redstuff @  17.4.2007,  09:31 Найти цитируемый пост)

Например дано:1 2 3 4 -7 100 -8 -11 500
Получить:1 -11 2 -8 3 -7 4 100 500

 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
betal
Дата 17.4.2007, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



блин ну принцип тот же просто я отсортировал не по возрастанию а по убыванию. И условие изменить.
Dovвсе прально у тя. То я немного  того..
Все проблемы от недопонимания..................
--------------------
101100010100001101100001110100101111011легкие деньги
PM WWW ICQ   Вверх
Dov
Дата 17.4.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(betal @  17.4.2007,  16:47 Найти цитируемый пост)
Все проблемы от недопонимания..................


betal, не расстраивайся, бывает и хуже.  smile 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
betal
Дата 17.4.2007, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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


Команда REDSTUFF
**


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

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



Dov, да работает как надо. Можно только пояснения к коду?
Например непонятно:
1) 
Код

#include<iomanip.h>
#include<limits.h>

Первый раз сталкиваюсь с этими библиотеками.
2) setw(4) - что эта за функция такая? Хотелось бы глянуть ее реализацию, типа того как описана swap() в примере
3) Зачем описывать функцию swap(), она и так вроде реализована.

Это сообщение отредактировал(а) Redstuff - 19.4.2007, 11:08


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


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



1. Я это делал в VC++6.0, если у тебя работает без этих библиотек, то не подключай.  iomanip.h нужен для setw().  В limits.h определена константа INT_MAX.
2. setw() - устанавливает ширину поля при выводе данных.
3. Смотри пункт 1. 




--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Redstuff
Дата 19.4.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Команда REDSTUFF
**


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

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



Dov, спасибо.
setw() - довольно полезная ф-ия при форматировании текста.


--------------------
ГОСТы, СНиПы, ТУ...
<реклама удалена администрацией форума>
PM MAIL WWW ICQ Skype   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1560 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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