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

Сгруппировать элементы массива - C++

Восстановить пароль Регистрация
 
Милана Сайнарое
Сообщений: n/a
01.12.2012, 01:45     Сгруппировать элементы массива #1
Сгруппировать положительные элементы в
начале, а отрицательные в конце массива
без сохранения порядка в каждой группе
за O(N) операций.спасибо заранее)))))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.12.2012, 01:45     Сгруппировать элементы массива
Посмотрите здесь:

одномерный массив. Все его элементы, не равные нулю, переписать, сохраняя их порядок в начало массива, а нулевые элементы в конец массива in c++ C++
C++ Вывести элементы массива на промежутке [ a,b ], вычислить количество элементов массива, заменить все положительные элементы
Сформировать и вывести на экран новый массив, который будет содержать вначале все элементы массива A(0), затем все элементы массива B(4) C++
C++ Получить массив, расположив в его начале элементы массива A, а затем — элементы массива B
Создать два новых массива, в один из которых поместить положительные элементы массива, а в другой отрицательные и нулевые элементы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.12.2012, 02:08     Сгруппировать элементы массива #2
C++
1
2
3
4
5
6
7
8
int arr[size];
int* left=arr;
int* right=arr+size-1;
while (left<right){
  while(*left++>0);
  while(*right--<0);
  swap(left, right);
}
Добавлено через 12 минут
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 <iostream>
#include <ctime>
#include <cstdlib>
void print(int* arr, int size){
    for(int i=0; i<size; i++)
        std::cout<<arr[i]<<", ";
    std::cout<<std::endl;
}
void generate(int* arr, int size){
    srand(time(NULL));
    for(int i=0; i<size; i++)
        arr[i]=rand()%100-50;
}
void richte_die_ordnung(int* arr, int size){
    int* left=arr;
    int* right=arr+size-1;
    while (left<right){
        while(v*left>0) left++;
        while(*right<0) right--;
        std::swap(*left, *right);
 
    }
}
int main()
{
    const int size=20;
    int buffer[size];
    generate(buffer, size);
    print(buffer, size);
    richte_die_ordnung(buffer, size);
    print(buffer, size);
    system("pause");
    return 0;
}
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
01.12.2012, 03:22     Сгруппировать элементы массива #3
Kuzia domovenok, еще #include <algorithm>
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
01.12.2012, 03:31     Сгруппировать элементы массива #4
Цитата Сообщение от MrGluck Посмотреть сообщение
еще #include <algorithm>
Сейчас специально проверил в MSVS. У меня и так работает. Правда, в строке 15 я клавишу 'v' случайно нажал, а исправить уже нельзя.
Ой, нет не совсем работает. 2 центральных элемента не переставляет
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,409
01.12.2012, 03:53     Сгруппировать элементы массива #5
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Сейчас специально проверил в MSVS. У меня и так работает. Правда, в строке 15 я клавишу 'v' случайно нажал, а исправить уже нельзя.
Ой, нет не совсем работает. 2 центральных элемента не переставляет
http://www.cplusplus.com/reference/cstdlib/ как видите, функция swap не определена.
http://en.cppreference.com/w/cpp/algorithm/swap а тут написано, что живет она в algorithm, что логично, т.к. функция шаблонная и определена в STL.
Yandex
Объявления
01.12.2012, 03:53     Сгруппировать элементы массива
Ответ Создать тему
Опции темы

Текущее время: 06:17. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru