Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
AZIZBEK
0 / 0 / 0
Регистрация: 16.06.2012
Сообщений: 37
#1

Изменить порядок следования элементов в массиве - C++

23.07.2012, 13:39. Просмотров 1704. Ответов 9
Метки нет (Все метки)

изменить порядок следования элементов в массиве так чтобы сначало располагались все отрицательные элементы за тем положительные а потом нули

найти сумму элементов массива расположенных после минемального элемента
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 13:39     Изменить порядок следования элементов в массиве
Посмотрите здесь:
Изменить порядок следования элементов в массиве на обратный C++
C++ Изменить порядок следования элементов в массиве используя указатели
C++ Если К меньше N, изменить порядок следования элементов в исходном массиве на обратный
Изменить порядок следования элементов в массиве на обратный, используя массив указателей C++
C++ Изменить порядок следования элементов массива
C++ Изменить порядок следования элементов массива
C++ Изменить порядок следования элементов массива на противоположный
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
23.07.2012, 16:31     Изменить порядок следования элементов в массиве #2
Я тебе посоветую: сортирни массив по возрастанию, потом начинаю с первого нуля по убыванию.

Цитата Сообщение от AZIZBEK Посмотреть сообщение
найти сумму элементов массива расположенных после минемального элемента
не под силу, извини
Infinity3000
1058 / 577 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
23.07.2012, 16:34     Изменить порядок следования элементов в массиве #3

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
не под силу, извини


Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.07.2012, 16:40     Изменить порядок следования элементов в массиве #4
Цитата Сообщение от kravam Посмотреть сообщение
Я тебе посоветую: сортирни массив по возрастанию, потом начинаю с первого нуля по убыванию.
Слишком затратный алгоритм получится для такой задачи, которую можно за 2 прохода по массиву решить. Подсказка: быстрая сортировка, вернее, ее принцип.
Петррр
5947 / 3384 / 336
Регистрация: 28.10.2010
Сообщений: 5,927
23.07.2012, 16:43     Изменить порядок следования элементов в массиве #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    const size_t size = 7;
    int array[size] = { 1, -2, 0, 6, 8, -6, 2 };
    std::vector<int> vector(array, array + size);
    std::copy(vector.begin(), vector.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    std::partition(
        std::partition(vector.begin(), vector.end(), std::bind2nd(std::less<int>(), 0)),
        vector.end(),
        std::bind2nd(std::greater<int>(), 0));
    std::copy(vector.begin(), vector.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
}
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
23.07.2012, 17:49     Изменить порядок следования элементов в массиве #6
Вот несколько прямолинейное, но рабочее решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <math.h>
#include <iostream.h>
 
int sgn(int a)
{
    if (a==0) 
        return 0;
    else
        return (a>0) ? 1 :0;
}
int main(int argc, char* argv[])
{
    int Arr[]={1,2,0,3,-4,-9,4,0,1,1,0};
    int n=sizeof(Arr)/sizeof(int);
    int i,j,tmp;
    for (i=0;i<n-1;i++)
        for (j=i+1; j<n; j++)
        {
            if  (sgn(Arr[i]) != sgn(Arr[j]))
                if ( ((Arr[i] >  0) && (Arr[j] <  0)) ||  
                     ((Arr[i] == 0) && (Arr[j] != 0)) )
                {
                    tmp=Arr[i];
                    Arr[i]=Arr[j];
                    Arr[j]=tmp;
                }
            
        }
        
    for (i=0; i<n; i++) cout << Arr[i] << " ";
    cout << endl;
 
    return 0;
}
Не что иное, как модифицированная сортировка перестановками.
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.07.2012, 20:34     Изменить порядок следования элементов в массиве #7
Ну зачем сортировки, лучший алгоритм неспециализированной сортировки имеет сложность http://www.cyberforum.ru/cgi-bin/latex.cgi?O(\sqrt{n}). А это настолько банальная задача, которая менее чем за 2 прохождения решается.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
int main()
{
   int buf, a[] = {1, 2, 0, -2, 0, 3, 0, -3};
   int i, j, n = sizeof(a)/sizeof (*a);
   i = 0;
   j = n - 1;
   while (i < j)
   {
       while (i < j && a[i] < 0)
          i++;
       while (i < j && a[j] >= 0)
          j--;
       if(i < j)
       {
            buf = a[i]; a[i] = a[j]; a[j] = buf;
            i++;
            j--;
       }
   }
   j = n - 1;
   while (i < j)
   {
       while (i < j && a[i] > 0)
          i++;
       while (i < j && a[j] == 0)
          j--;
       if(i < j)
       {
            buf = a[i]; a[i] = a[j]; a[j] = buf;
            i++;
            j--;
       }
   }
   for (i = 0; i < n; i++)
      printf("%d ", a[i]);
   return 0;
}
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
23.07.2012, 21:06     Изменить порядок следования элементов в массиве #8
Осторожно замечу, что сортировка-то у меня не полная...
Миниатюры
Изменить порядок следования элементов в массиве  
Thinker
Эксперт C++
4225 / 2199 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
23.07.2012, 21:09     Изменить порядок следования элементов в массиве #9
Catstail, сложность Вашего алгоритма http://www.cyberforum.ru/cgi-bin/latex.cgi?O(n^2) в среднем случае.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 21:10     Изменить порядок следования элементов в массиве
Еще ссылки по теме:
C++ Изменить порядок следования элементов массива на обратный
C++ Изменить порядок следования всех элементов в стеке на противоположный по условию
C++ Как поменять порядок следования элементов в массиве на противоположный?
C++ измените порядок следования элементов в массиве так,чтобы...
Составить программу, которая меняет порядок следования элементов в массиве на обратный для линейных таблиц Х[12] и Y[10] C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Catstail
Модератор
22515 / 10920 / 1774
Регистрация: 12.02.2012
Сообщений: 18,067
23.07.2012, 21:10     Изменить порядок следования элементов в массиве #10
Это да...
Yandex
Объявления
23.07.2012, 21:10     Изменить порядок следования элементов в массиве
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru