Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Chainik!
1 / 1 / 5
Регистрация: 10.11.2008
Сообщений: 43
#1

Сортировка массива - C++

06.09.2012, 22:20. Просмотров 421. Ответов 8
Метки нет (Все метки)

Дан массив, элементы которого равны либо 1 либо 2. Отсортировать таким образом, чтобы за каждой единицей следовала двойка, причём если таких элементов больше, они выписывались в конец.

Например (2,1,1,1,2,1).

Должно получится 1,2,1,2,1,1.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 22:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Сортировка массива (C++):

Быстрая сортировка(сортировка Хоара). Отсортировать фрагмент массива
Мне нужно отсортировать фрагмент массива, расположенный между первым и...

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

Сортировка массива структур через сортировку массива указателей
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто...

Сортировка массива. Ошибка после ввода размерности массива
подскажите почему после ввода размерности массива выдает ошибку...

Сортировка массива, вместо массива выводит мусор
Здравствуйте Уважаемые жители форума! Есть рабочий код сортируем массив...

Указатели массива и сортировка массива
Доброго времени суток, вот бьюсь над проблемой, нужна программа которая б...

8
soundtrack
42 / 42 / 12
Регистрация: 15.12.2011
Сообщений: 131
06.09.2012, 22:45 #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
38
39
40
41
42
43
44
45
46
#include <iostream>
using namespace std;
 
void main()
{
    int *mas, N, odin=0, dva=0;
    cout<<"Vvedite razmer massiva: _\b";
    cin >> N;
    mas = new int[N];
    cout<<"Zapolnite massiv (1 ili 2): _\b";
    for(int i=0; i<N; i++)
    {
        cin>>mas[i];
        if(mas[i]==1) odin++;
        else dva++;
    }
    int razn;
    if(odin>dva) 
    {
        razn = odin-dva;
        for(int i=N-1; i>=N-razn; i--)
        {
            mas[i]=1;
        }
        for(int i=0; i<N-razn; i++)
        {
            if(i%2>0) mas[i]=2; else mas[i]=1;
        }
    }
    else
    {
        razn = dva-odin;
        for(int i=N-1; i>=N-razn; i--)
        {
            mas[i]=2;
        }
        for(int i=0; i<N-razn; i++)
        {
            if(i%2>0) mas[i]=2; else mas[i]=1;
        }
    }
    cout<<"Novi massiv:\t";
    for(int i=0; i<N; i++) cout<<mas[i]<<" ";
    delete []mas;
    system("pause");
}
1
Миниатюры
Сортировка массива  
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
06.09.2012, 23:17 #3
soundtrack, здесь алгоритм намного проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <time.h>
using namespace std;
 
int main(void)
{ 
 srand(time(NULL));
 const int n=10;
 int a[10],i,j;   
 for (i=1; i<n; i++)
  {
   a[i]=rand()%2+1;
   cout<<a[i]<<" ";
  }
  cout<<endl;
   for (i=1; i<n; i++)
    for (j=i; j<n; j++)
     if ((a[i]%2==0 && i%2!=0) || (a[i]%2!=0 && i%2==0))
      swap(a[i],a[j]);
   for (i=1; i<n; i++)
    cout<<a[i]<<" ";
 cin.get();
}
1
I.M.
566 / 549 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
06.09.2012, 23:22 #4
Здесь алгоритм еще проще. 2 переменных счетчика. в одной количество 1, в другой количество 2. берем минимум из них как границу циула, а в цикле заносим 1 и 2. затем дописываем остаток
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
06.09.2012, 23:28 #5
I.M., не совсем понятно. Например, взяли a=1 и b=2, так? Берем минимум из них - это a=1. И...что дальше?

Добавлено через 56 секунд
Или имеется в виду количество двоек и единиц? А это не дольше по работе?
0
soundtrack
42 / 42 / 12
Регистрация: 15.12.2011
Сообщений: 131
06.09.2012, 23:31 #6
I.M., ты рассказал ровно то, что я реализовал в своём коде
0
I.M.
566 / 549 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
06.09.2012, 23:39 #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int count[2] = {0, 0};
for(int i = 0; i!=data_size; ++i)
{
   count[data[i]-1]++;
}
int pair_count = std::min(count[0], count[1]);
for(int i = 0; i<pair_count; ++i)
{
   output.push_back(1);
   output.push_back(2);
}
for(int i = pair_count+1; i<=count[0]; ++i)
{
   output.push_back(1);
}
for(int i = pair_count+1; i<=count[1]; ++i)
{
   output.push_back(2);
}
прошу прощения, не вчитывался в код из второго поста
0
Toshkarik
1148 / 865 / 90
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
06.09.2012, 23:53 #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void strangeSort ( int *arrayPtr, const std::size_t size ) {
   bool tmp = false;
   std::size_t one = 0,
               two = 0,
               pos = 0;
   
   for ( std::size_t i = 0; i < size; i++ )
      arrayPtr[ i ] == 1 ? one++ : two++;
   
   for ( ; one && two; pos += 2 ) {
      arrayPtr[ pos ] = 1;
      arrayPtr[ pos + 1 ] = 2;
      
      one--;
      two--;
   }
   
   tmp = two > 0;
   
   for ( ; pos < size; pos++)
      arrayPtr[ pos ] = tmp + 1;
}
0
Chainik!
1 / 1 / 5
Регистрация: 10.11.2008
Сообщений: 43
07.09.2012, 20:05  [ТС] #9
Спасибо
0
07.09.2012, 20:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2012, 20:05
Привет! Вот еще темы с решениями:

Сортировка массива
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;cstdlib&gt; using namespace...

Сортировка массива
Задан целочисленный массив размера N. Отсортировать элементы массива в порядке...

С++ Сортировка массива
Помогите пожалуйста. Одномерный массив. Преобразовать массив таким...

Сортировка массива
В одномерном массиве , состоящих из n вещественных элементов: Преобразовать...


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

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

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