0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
1

Все отрицательные в конец массива

11.01.2012, 18:55. Показов 1044. Ответов 18
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В одномерном массиве все отрицательные элементы переместить в конец.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2012, 18:55
Ответы с готовыми решениями:

Все отрицательные элементы массива перенести в начало, а все остальные - в конец
помогите пожалуйста))) преобразовать массив по следующему правилу (воспользовавшись массивом у как...

Массив: Все отрицательные элементы массива перенести в начало, а все остальные – в конец.
Задан массив из k чисел. Преобразовать массив следующим образом: все отрицательные элементы массива...

Все отрицательные элементы заданного массива перенести в начало, а все остальные – в конец
Помогите пожайлуста написать код . задание такое. желательно как можно проще и с коментариями ...

Для каждого из массивов все отрицательные элементы переместить в начало массива, а все положительные — в конец
Составить программу, которая превращает массивы А и В следующим образом: для каждого из них все...

18
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
11.01.2012, 19:09 2
C
1
2
3
4
5
6
int compare (const void * a, const void * b)
{
  return ( *(int*)b - *(int*)a);
}
 
qsort (values, SIZE, sizeo f(int), compare);
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
11.01.2012, 19:22  [ТС] 3
можно целую задачу,нормально написанную
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
11.01.2012, 19:33 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
 
int compare (const void * a, const void * b)
{
  return ( *(int*)b - *(int*)a);
}
 
int main (void)
{
   int arr[] = { -40, 10, -100, 90, 20, 25 };
   const int SIZE = sizeof (arr) / sizeof (arr[0]);
   int n;
   
   qsort (arr, SIZE, sizeof(int), compare);
 
   for (n=0; n<6; n++)
      printf ("%5d ", arr[n]);
   return 0;
}
http://liveworkspace.org/code/... 618b0d1079
0
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
11.01.2012, 19:39 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
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <algorithm>
 
void repl(int [], int, int);
 
int main()
{
    int mass[10];
 
    srand(time(NULL));
 
    for(int i = 0; i < 10; i++)
    {
        mass[i] = 1 + rand() % 15;
 
        if(i % 2 == 0)
            mass[i] *= -1;
 
        std::cout << std::setw(5) << mass[i];
    }
 
    std::cout << std::endl;
 
    std::sort(mass,mass + 10);
 
    repl(mass,0,9);
 
    for(int i = 0; i < 10; i++)
        std::cout << std::setw(5) << mass[i];
 
    std::cout << std::endl;
 
    return 0;
}
 
void repl(int mass[], int step, int end)
{
    if(mass[step] < 0 && step < end)
    {
        std::swap(mass[step],mass[end]);
        repl(mass,step+1,end-1);
    }
}
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
11.01.2012, 22:47  [ТС] 6
Сделайте чтобы вручную массив вводить
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
11.01.2012, 22:52 7
C++
1
2
3
4
5
template <class T> void input (T *first, T *last)
{
    for ( ; first != last ; ++first )
        std::cin >> *first;
}
0
0 / 0 / 0
Регистрация: 21.12.2011
Сообщений: 16
11.01.2012, 23:36  [ТС] 8
а можно в программу в простом виде без сложных функций
0
1186 / 542 / 78
Регистрация: 01.07.2009
Сообщений: 3,517
12.01.2012, 00:03 9
hally, ну так соедините же всё в одно, вам уже и так готовое написали, с вас минимальные познания в программировании требуются чтобы совместить всё.
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
12.01.2012, 10:51 10
Если важен изначальный порядок следования, то так (на счёт предиката не очень уверен, но все мои тесты вроде прошёл):
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
template<typename T>
bool lz_order(const T& left, const T& right)
{
    if (left < T())
        return false;
    else if (right < T())
        return true;
    else
        return false;
}
 
int main()
{
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    
    std::stable_sort(vec.begin(), vec.end(), lz_order<int>);
    
    std::copy(vec.begin(), vec.end(), std::ostream_iterator<int>(std::cout, "  "));
    
    return 0;
}
0
Фрилансер
Эксперт С++
5845 / 1226 / 499
Регистрация: 23.11.2010
Сообщений: 3,375
Записей в блоге: 1
12.01.2012, 12:56 11
Что бы не дублировать return можно немножко упростить
C++
1
2
3
4
5
template<typename T>
bool lz_order(const T& left, const T& right)
{
        return right < T() ? true : false;
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
12.01.2012, 13:00 12
Dekio, не прокатит. Сначала всё равно надо проверить left.

Добавлено через 1 минуту
Т.е. так:
C++
1
2
3
4
5
template<typename T>
bool lz_order(const T& left, const T& right)
{
    return left < T() ? false : right < T() ? true : false;
}
0
6280 / 3565 / 898
Регистрация: 28.10.2010
Сообщений: 5,926
12.01.2012, 13:47 13
partition не канает?
1
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
12.01.2012, 13:51 14
Петррр, порядок не сохранится. Для такого варианта уже были предложены решения.
0
9 / 9 / 4
Регистрация: 14.11.2011
Сообщений: 27
12.01.2012, 16:08 15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include<iostream>
using namespace std;
int main()
{
    int n,a[100000],i;
    cin>>n;
    for (i=1; i<=n; i++)
    {
        cin>>a[i];
    }
    for (i=1; i<=n; i++)
    {
        if (a[i]>=0) cout<<a[i]<<" ";
    }
    for (i=1; i<=n; i++)
    {
        if (a[i]<0) cout<<a[i]<<" ";
    }
    system("pause");
    return 0;
}
0
Эксперт С++
5055 / 3115 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
12.01.2012, 16:11 16
Shaykemelov, ваш код не выполняет поставленную задачу. Необходимо не просто вывести элементы в определённом порядке, а физически перегруппировать их так, чтобы все отрицательные числа оказались после всех неотрицательных.
0
0 / 0 / 0
Регистрация: 12.01.2012
Сообщений: 4
12.01.2012, 17:00 17
да что-то задано не так
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
23.01.2012, 22:53 18
Вариант на Си
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
38
39
#include <stdio.h>
 
int fun(int val) 
{
    if ( val )
        return 0;
    return 1;
}
 
void My_sort(int* first, int* last, int (*Pred) (int )) 
{
    int t, *right, *tt;
    for ( right = last ; (right > first) && Pred(*(right - 1)) ; --right )
        ;
    for ( ; first < right ; ++first )
        if ( Pred(*first) )
        {
            t = *first; 
            for ( tt = first + 1 ; (tt != right) && Pred(*tt) ; ++tt )
                ;
            *first = *(tt);
            *(tt) = t;
            right -= Pred(*(right - 1)) ? 1 : 0;
        }
}
 
#define SIZE(a) ((sizeof(a)) / (sizeof(*a)))
 
int main(void)
{
    int arr[] = { 1, 2, 0, 0, 3, 4, 0, 5, 6, 0, 0, 1}, i;
 
    My_sort(arr, arr + SIZE(arr), fun);
    for ( i = 0 ; i < SIZE(arr) ; ++i )
        printf ("%5d", arr[i]);
    printf ("\n");
 
    return 0;
}
http://liveworkspace.org/code/... 0777ed9def

Добавлено через 3 часа 56 минут
Этот же код на С++11
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <algorithm>
 
#define SIZE(a) ((sizeof(a)) / (sizeof(*a)))
 
int main(void)
{
   int arr[] = { 1, 2, 0, 0, 3, 4, 0, 5, 6, 0, 0, 1}, i;
   std::stable_sort(arr, arr + SIZE(arr), [] (int i, int j) { return ((i != 0) && (j == 0)); });
   for (auto it = arr ; it < arr + SIZE(arr) ; ++it )
      std::cout << *it << std::endl;
}
http://liveworkspace.org/code/... adad6da5da
Только я сделал, перемещение нулей в конец, но переделать не проблема. Только фугкцию сравнения изменить
0
go
Эксперт С++
3646 / 1378 / 243
Регистрация: 16.04.2009
Сообщений: 4,526
18.02.2012, 18:46 19
Цитата Сообщение от silent_1991 Посмотреть сообщение
Петррр, порядок не сохранится. Для такого варианта уже были предложены решения.
Тогда stable_partition
1
18.02.2012, 18:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.02.2012, 18:46
Помогаю со студенческими работами здесь

Перенести все отрицательные элементы массива в конец
#include &lt;iostream&gt; #include &lt;ctime&gt; using namespace std; #define n 10 int main(){...

Все отрицательные цифры поместить в начало массива, а положительные в конец
4. Дан массив положительных и отрицательных чисел. Переписать массив так, чтобы все отрицательные...

Все положительные элементы массива поставить в начало, а отрицательные - в конец
Помогите решить такую задачу пжл: дан одномерный массив &quot;а&quot; (состоящий из вещественных чисел)....

В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru