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

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

Восстановить пароль Регистрация
 
Chainik!
1 / 1 / 1
Регистрация: 10.11.2008
Сообщений: 43
06.09.2012, 22:20     Сортировка массива #1
Дан массив, элементы которого равны либо 1 либо 2. Отсортировать таким образом, чтобы за каждой единицей следовала двойка, причём если таких элементов больше, они выписывались в конец.

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

Должно получится 1,2,1,2,1,1.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 22:20     Сортировка массива
Посмотрите здесь:

C++ Сортировка массива
C++ Сортировка массива
C++ Сортировка массива
Указатели массива и сортировка массива C++
C++ Сортировка массива, вместо массива выводит мусор
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 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");
}
Миниатюры
Сортировка массива  
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 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();
}
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
06.09.2012, 23:22     Сортировка массива #4
Здесь алгоритм еще проще. 2 переменных счетчика. в одной количество 1, в другой количество 2. берем минимум из них как границу циула, а в цикле заносим 1 и 2. затем дописываем остаток
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
06.09.2012, 23:28     Сортировка массива #5
I.M., не совсем понятно. Например, взяли a=1 и b=2, так? Берем минимум из них - это a=1. И...что дальше?

Добавлено через 56 секунд
Или имеется в виду количество двоек и единиц? А это не дольше по работе?
soundtrack
 Аватар для soundtrack
41 / 41 / 4
Регистрация: 15.12.2011
Сообщений: 131
06.09.2012, 23:31     Сортировка массива #6
I.M., ты рассказал ровно то, что я реализовал в своём коде
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 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);
}
прошу прощения, не вчитывался в код из второго поста
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2012, 20:05     Сортировка массива
Еще ссылки по теме:

Сортировка массива C++
Сортировка массива. Ошибка после ввода размерности массива C++
C++ Сортировка массива

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

Или воспользуйтесь поиском по форуму:
Chainik!
1 / 1 / 1
Регистрация: 10.11.2008
Сообщений: 43
07.09.2012, 20:05  [ТС]     Сортировка массива #9
Спасибо
Yandex
Объявления
07.09.2012, 20:05     Сортировка массива
Ответ Создать тему
Опции темы

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