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

В одномерном массиве все отрицательные элементы переместить в начало массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.75
dioris
-19 / 0 / 0
Регистрация: 23.11.2011
Сообщений: 82
06.03.2012, 11:13     В одномерном массиве все отрицательные элементы переместить в начало массива #1
в одномерном массиве все отрицательные элементы переместить в начало массива, а остальные - в конец с сохранением порядка следования не использовать доп. Массив
C++
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2012, 11:13     В одномерном массиве все отрицательные элементы переместить в начало массива
Посмотрите здесь:

[C++]Все отрицательные элементы массива перенести в начало, а все остальные - в конец C++
Переставить все отрицательные элементы в начало массива C++
Данный массив A (n). Все положительные его элементы поместить в начало массива B (n), а все отрицательные - в начало массива C (n). Подсчитать количес C++
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохранением порядка следования C++
C++ Для каждого из массивов все отрицательные элементы переместить в начало массива, а все положительные — в конец
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,161
Завершенные тесты: 1
06.03.2012, 11:50     В одномерном массиве все отрицательные элементы переместить в начало массива #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const int N=10;
int mass[N];
int posplus=0;
for(int i=0;i<N;i++)
{
    if(mass[i]<0 && posplus==i) posplus++;
    else
    {
          int t=mass[i];
          for(int j=i;i>posplus;j--)
                   mass[j]=mass[j-1];
          mass[posplus]=t;
          posplus=i+1;
     }
}
}
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:19     В одномерном массиве все отрицательные элементы переместить в начало массива #3

Не по теме:

Цитата Сообщение от zss2 Посмотреть сообщение
int t=mass[i];
zss2, ну зачем объявление в цикле (на это же по моему тоже процессорное время идёт). Оно то не заметно на простом а когда сложное что-то то сидим и думаем ; А куда же распыляется наш процессор???
Я вообще не признаю новых стандартов где можно использовать рядышком циклы с объявлением одной и той же переменной и стараюсь избегать множественных объявлений...



Добавлено через 1 минуту
Сейчас накидаю что-нибудь от себя...
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,161
Завершенные тесты: 1
06.03.2012, 12:31     В одномерном массиве все отрицательные элементы переместить в начало массива #4
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну зачем объявление в цикле
Если бы память под переменные выделялась динамически,
то время бы тратилось.
А так, по моему наглядней (объявляем переменную только тогда,
когда она нужна).
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:34     В одномерном массиве все отрицательные элементы переместить в начало массива #5
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Сейчас накидаю что-нибудь от себя...
- Вот что получилось
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
#include <iostream>
#include <cstdlib> //ÂïðèГ*öèïå ìîæГ*Г® áûëî Г*ГҐ ïîäêëþ÷Г*ГІГј
#include <ctime>
using namespace std;
 
int main()
{
    int i, j, k;
    time_t t;
    srand(time(&t));
    int array[30];//ГЏГіГ±ГІГј áóäåò Г¬Г*Г±Г±ГЁГў ГЁГ§ 30 ýëåìåГ*òîâ
    for(i = 0; i < 32; i++)
        //Г‡Г*ïîëГ*ГїГҐГ¬ Г¬Г*Г±Г±ГЁГў ñëó÷ Г·ГЁГ±Г«Г*ìè Гў äèГ*ГЇГ*çîГ*ГҐ -5 5
        cout<<(array[i] = rand()%10 - 5)<<" ";
    for(k = (i = 0); i < 30; i++)
    {
        if(0 < array[(j = i)])
        {
            while(0 < array[j] && j < 30)
                j++;
            if(j < 30)
            {
                array[j] += array[k];
                array[k] = array[j] - array[k];
                array[j] = array[j] - array[k];
                k++;
            }
        }
    }   
    cout<<endl;
    cout<<"sorted array\n";
    for(i = 0; i < 30; i++)
        cout<<array[i]<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
Миниатюры
В одномерном массиве все отрицательные элементы переместить в начало массива  
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:43     В одномерном массиве все отрицательные элементы переместить в начало массива #6
Цитата Сообщение от zss2 Посмотреть сообщение
Если бы память под переменные выделялась динамически,
то время бы тратилось.
- попробую несогласиться так как объявление переменной тоже самое что резервирование свободной ячейки памяти, при этом не факт что кадый раз здесь
Цитата Сообщение от zss2 Посмотреть сообщение
int t=mass[i];
при объявлении будет резервироваться таже самая ячейка. По-моёму лучше объявить все до вызвающего модуля в любом случае проигыша в скорости не будет + в последствии это позволяет избежать коварных подводных камней когда используем вновь объявленную но неинициализированную переменную...Впринципе ТС-у должно быть видней что ему более подходит на данном этапе. Я просто высказал своё мнение

Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
if(0 < array[(j = i)])
* * * * * * * * {
* * * * * * * * * * * * while(0 < array[j]
- подумав пришёл к выводу что данные условия должны быть переписанны следующим образом
if(0 <= array[(j = i)])
{
while(0 <= array[j] && j < 30)
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,161
Завершенные тесты: 1
06.03.2012, 12:47     В одномерном массиве все отрицательные элементы переместить в начало массива #7
Несомненно это дело вкуса программиста.
На мой взгляд
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
используем вновь объявленную но неинициализированную переменную.
совсем наоборот. Поскольку тут объявляется новая переменная,
то действительно предполагается, что она новая и нужна только тут.
Тем самым мы не испортим переменную более высокого уровня,
если она случайно имеет такое же имя.
-=ЮрА=-
Заблокирован
Автор FAQ
06.03.2012, 12:56     В одномерном массиве все отрицательные элементы переместить в начало массива #8
zss2, своим постом также хотел уберечь начинающих програмистов ещё и от оишбок следующего плана (ниже гипотетический пример). А ведь чаще всего они на таких моментах и ошибаются
C++
1
2
3
4
5
6
7
8
9
10
for(int i = 0 ; i < n; i++)
{
      if(arr[i] < 0)
          break;
}
 
for(int i, j = 0; j < n; j++)
{
      arr[j] -= arr[i];
}
Объявив i и j ещё до начала первого цикла можно было бы полностью себя обезопасить от передачи неинициализированной переменной i.

Добавлено через 4 минуты

Не по теме:

zss2, согласитесь множественная инициализация либо инициализация в цикле могут сыграть с начинающим злую шутку, запутывая алгоритм

diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
06.03.2012, 15:35     В одномерном массиве все отрицательные элементы переместить в начало массива #9
Цитата Сообщение от dioris Посмотреть сообщение
C++
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
 
int main()
{
    std::vector< int > arr = { 1, -2, 3, -4, 5 };
    std::stable_partition( arr.begin(), arr.end(), std::bind2nd(std::less< int >(), 0) );
    std::copy( arr.begin(), arr.end(), std::ostream_iterator< int > (std::cout, " ") );
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 14:10     В одномерном массиве все отрицательные элементы переместить в начало массива
Еще ссылки по теме:

Переместить все положительные элементы в начало массива C++
C++ Переместить все отрицательные элементы в «хвост» массива
Отрицательные значения массива переместить в начало C++

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

Или воспользуйтесь поиском по форуму:
Vanson
0 / 0 / 0
Регистрация: 22.02.2014
Сообщений: 9
22.02.2014, 14:10     В одномерном массиве все отрицательные элементы переместить в начало массива #10
А как выполнить то же самое, но используя динамический массив?
Yandex
Объявления
22.02.2014, 14:10     В одномерном массиве все отрицательные элементы переместить в начало массива
Ответ Создать тему
Опции темы

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