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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка с чередованием, отрицательных и положительных элементов 
V
    Опции темы
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   Вверх
Страницы: (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.1032 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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