Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
Ayrmax
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 85
#1

Отсортировать массив из 0 и 1 так, чтобы все нули находились в начале, а все единицы - в конце массива - C++

06.08.2015, 12:58. Просмотров 1072. Ответов 20
Метки нет (Все метки)

Тема: Функции
1. Дано одномерный массив, заполненный 0 и 1 в произвольном порядке. Отсортировать данный массив таким образом, чтобы все нули находились в начале, а все единицы - в конце массива. Дополнительный массив не использовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.08.2015, 12:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Отсортировать массив из 0 и 1 так, чтобы все нули находились в начале, а все единицы - в конце массива (C++):

Отсортировать массив таким образом, чтобы все нули находились в начале, а единицы — в конце массива - C++
Здравствуйте, дано такое задание Элементами массива IM(N) являются числа 0 и 1. Отсортировать этот массив таким образом, чтобы все нули...

Отсортировать массив, чтобы все положительные числа находились в начале, отрицательные - в конце - C++
Помогите пожалуйста. Дан вещественный массив A( N ) . Отсортировать его таким образом , чтобы все положительные числа находились в...

Расположить элементы массива так, чтобы нули было в начале, а единицы в конце - C++
Дан массив, состоящий из нулей и единиц, нужно расположить элементы массива так, чтобы нули было в начале, а единицы в конце.

Переставить элементы массива так, чтобы сначала располагались все нули, затем все двойки и, наконец, все единицы - C++
Добрый день ! У меня к вам просьба. Помогите решить задачу по с++ начинающему чайнику. :wall: Задача. В массиве A(N) каждый...

Отсортировать заданную последовательность так, чтобы все нули оказались в конце - C++
Задача: Дана последовательность чисел, отсортировать эту последовательность так, чтобы все нули оказались в конце, а все остальные числа...

Дан массив а1+ a2+…+an Переставить его элементы так чтобы в начале массива расположились все его неотрицательные элементы, а в конце - отрицательные - C++
Дан массив а1+ a2+…+an помогите переставить его элементы так чтобы в начале массива расположились все его неотрицательные элементы, а в...

20
Evg
Эксперт CАвтор FAQ
18693 / 6659 / 469
Регистрация: 30.03.2009
Сообщений: 18,644
Записей в блоге: 29
06.08.2015, 13:31 #2
Посчитать количество нулей и единиц. Заполнить массив по новой сначала N нулей, потом M единиц
1
Ferrari F1
623 / 520 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
06.08.2015, 13:33 #3
Ayrmax,
C++
1
2
3
4
5
6
7
8
void sort(bool* const& arr, const short n)
{
    short i(0), count(i);
    for (bool* tmp(arr); i < n; i++)
        count = !*tmp++ ? count + 1 : count;
    for (i = 0; count; count--, arr[i++] = 0);
    for (; i < n; arr[i++] = 1);
}
0
ILKarina
17 / 17 / 4
Регистрация: 06.03.2013
Сообщений: 330
Завершенные тесты: 2
06.08.2015, 13:38 #4
Ayrmax, А пузырек не подойдет разве?
0
Evg
Эксперт CАвтор FAQ
18693 / 6659 / 469
Регистрация: 30.03.2009
Сообщений: 18,644
Записей в блоге: 29
06.08.2015, 13:42 #5
Цитата Сообщение от ILKarina Посмотреть сообщение
Ayrmax, А пузырек не подойдет разве?
Любой метод сортировки подойдёт

Добавлено через 2 минуты
Ferrari F1, удали исходную задачу и покажи людям твою программу с вопросом "что делает программа". В среднем люди будут думать долго. Перепиши её без выпендрежа и повтори эксперимент. Ответ везде будет почти мгновенным. У начинающих почему-то есть стремление писать программы как можно более извращённо ради того, чтобы программа была на 5 символов короче
0
Ayrmax
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 85
06.08.2015, 14:03  [ТС] #6
вот мой код, но он не работает, я новичок и с функциями не работал!
подскажите как правельно рандомом заполнить массив через функцию.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <windows.h>
#include <ctime>
using namespace std;
bool Sort( const int size,int Arr[ ],int cursize); 
void main()
{
 
    int cursize;
    const int size=10;
    int Arr[size]={1,1,0,0,1,0,1,0,0,0};
}
bool Sort( const int size,int Arr[],int cursize)
{
    
    for(int i=0;i<cursize;i++)
    {
     if (Arr[i]>Arr[i+1]);
     int temp=Arr[i];
     Arr[i]=Arr[i+1];
     Arr[i+1]=temp;
    }
0
Monty_Python
8 / 8 / 4
Регистрация: 31.07.2015
Сообщений: 39
06.08.2015, 14:06 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
void sort(int array[], int size) {
    for ( int i = 0, j = size-1; i < j; ) {
        if ( array[i] != 0 && array[j] != 1 ) {
            int temp;
            temp = array[j];
            array[j] = array[i];
            array[i] = temp;
        } 
        if ( array[i] == 0 ) i++;
        if ( array[j] == 1 ) j--;
    }
}
1
Ferrari F1
623 / 520 / 101
Регистрация: 27.01.2015
Сообщений: 3,025
Записей в блоге: 1
Завершенные тесты: 1
06.08.2015, 14:16 #8
Ayrmax,
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
47
#include <iostream>
using std::cout;
using std::cin;
using std::endl;
using std::left;
 
#include <cstdlib>
using std::srand;
using std::rand;
 
#include <iomanip>
using std::setw;
 
#include <windows.h>
#include <ctime>
 
void sort(bool* const& arr, const short n)
{
    short i(0), count(i);
    for (bool* tmp(arr); i < n; i++)
        count = !*tmp++ ? count + 1 : count;
    for (i = 0; count; count--, arr[i++] = 0);
    for (; i < n; arr[i++] = 1);
}
 
int main(void)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    cout << "Введите размерность массива: ";
    short n;
    cin >> n;
    bool* mas(new bool[n]);
    srand(time(0));
    for (short i(0); i < n;)
        mas[i++] = rand() % 2;
    for (short i(0); i < n;)
        cout << left << setw(2) << mas[i++];
    cout << endl;
    sort(mas, n);
    for (short i(0); i < n;)
        cout << left << setw(2) << mas[i++];
    delete[] mas;
    cout << endl;
    system("pause");
    return 0;
}
1
Ayrmax
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 85
06.08.2015, 18:52  [ТС] #9
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
#include <iostream>
using namespace std;
int sort(int array[], int size);
void main()
{
    const int size=10;
    int Arr[size]={1,1,0,0,1,0,1,0,0,0};
}
int sort(int array[], int size) 
{
    for ( int i = 0, j = size-1; i < j; ) 
    {
        if ( array[i] != 0 && array[j] != 1 )
        {
            int temp;
            temp = array[j];
            array[j] = array[i];
            array[i] = temp;
        } 
        if ( array[i] == 0 ) i++;
        if ( array[j] == 1 ) j--;
    }
    for(int f=0;f<size-1;f++)
    {
    cout<<array[f];
    }
    return;
}
Добавлено через 53 секунды
Отсортировать массив из 0 и 1 так, чтобы все нули находились в начале, а все единицы - в конце массива
0
Andrew Sinjagin
20 / 21 / 3
Регистрация: 04.08.2015
Сообщений: 129
06.08.2015, 19:25 #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
27
28
29
30
31
32
33
34
35
36
#include <iostream>
using namespace std;
 
void Sort(int array[], int size);
 
int main()
{
    const int size=10;
    int Arr[size]={1,1,0,0,1,0,1,0,0,0};
    sort(Arr,size);
    
    return 0;
}
 
void Sort(int array[], int size)
{
    for ( int i = 0, j = size-1; i < j; )
    {
        if ( array[i] != 0 && array[j] != 1 )
        {
            int temp;
            temp = array[j];
            array[j] = array[i];
            array[i] = temp;
        }
 
        if ( array[i] == 0 ) i++;
        if ( array[j] == 1 ) j--;
    }
    
    for(int i=0;i<size;i++)
    {
        cout<<array[i];
    }
    return;
}
Перепишите на это

Бывшие недостатки:
1) Не было возврата из функции main
2) Не вызывалась функция Sort()

Ну и кое-что по мелочи

И не стесняйтесь использовать форматирование для сообщений
0
S_el
06.08.2015, 19:30
  #11

Не по теме:

Цитата Сообщение от Andrew Sinjagin Посмотреть сообщение
1) Не было возврата из функции main
Это как раз ладно,другое дело void main() - не стандарт.

0
Ayrmax
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 85
06.08.2015, 19:30  [ТС] #12
не работает
0
S_el
2124 / 1651 / 311
Регистрация: 15.12.2013
Сообщений: 6,478
06.08.2015, 19:32 #13
Ayrmax, работает,если первую букву изменить на заглавную:
http://ideone.com/kwkdTJ
неужели вы и такое исправить сами не в состоянии?
0
Andrew Sinjagin
20 / 21 / 3
Регистрация: 04.08.2015
Сообщений: 129
06.08.2015, 19:39 #14
Прошу прощения за опечатку в предыдущем

Вообще для решения данной задачи удобнее использовать сортировку подсчетом и функция Sort() будет выглядеть так(если можно менять исходный массив):
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
void Sort(int arr[],int size)
{
    int one = 0;
    
    for(int i = 0; i<size;++i)
    {
        if (!arr[i]) one++;
    }
    
    for(int i = 0; i<size-one;++i)
    {
        arr[i] = 0;
    }
    
    for(int i = size-one; i<size;++i)
    {
        arr[i] = 1;
    }
    
    for(int i = 0; i<size;++i)
    {
        cout << arr[i];
    }
    
    return;
}
И вот так, если нужно просто вывести конечный результат
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void Sort(int arr[],int size)
{
    int one = 0;
    
    for(int i = 0; i<size;++i)
    {
        if (!arr[i]) one++;
    }
    
    for(int i = 0; i<size-one;++i)
    {
        cout << '0';
    }
    
    for(int i = size-one; i<size;++i)
    {
        cout << '1';
    }
    
    return;
}
1
Ayrmax
0 / 0 / 0
Регистрация: 06.08.2015
Сообщений: 85
06.08.2015, 20:53  [ТС] #15
я просто новичок в этом деле.
подскажите как этот массив Рандомом заполнить. большое спасибо
0
06.08.2015, 20:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2015, 20:53
Привет! Вот еще темы с ответами:

Дан массив а1,а2,,…,аn. Переставить его элементы так, чтобы в начале массива расположились все его неотрицательные элементы, а в конце – отрицательные - C++
Помогите плиз написать программу: Дан массив а1,а2,,…,аn. Переставить его элементы так, чтобы в начале массива расположились все его...

Разместить в массиве все положительные элементы в начале, отрицательные - в конце, посередине - нули - C++
Всем доброго времени суток! Большая просьба помочь написать программу. Нужно сформировать 2 одинаковых динамических одномерных массива, где...

Переставить значение элементов заданного одномерного массива, так чтобы все нулевые оказались в конце массива - C++
А не нулевые в начале, не нарушая порядок, в котором они были

Массив А состоящий из 30 элементов, переформировать так чтобы в начале стояли все неотрицательные значения ... - C++
недавно начал изучать С++ и столкнулся с такой проблемкой.. дан массив А состоящий из 30 элементов, переформировать так чтобы в начале...


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

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

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