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

Сортировка одномерного массива - C++

Восстановить пароль Регистрация
 
arialover
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 3
04.10.2012, 23:29     Сортировка одномерного массива #1
Всем доброго времени суток!
Имеется одномерный массив A(N), состоящий из 0, 1 или 2.
Переставить элементы массива так, чтобы сначала располагались все нули, затем все двойки и, наконец, все единицы (дополнительного массива не заводить).
Решение задачи оформит в виде функции, которая получает в качестве параметров указатель на массив и количество элементов массива.

Надеюсь на вашу помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 23:29     Сортировка одномерного массива
Посмотрите здесь:

C++ Сортировка одномерного массива
Сортировка одномерного массива C++
сортировка одномерного массива C++
C++ Сортировка одномерного массива С++
Сортировка одномерного массива C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
05.10.2012, 00:03     Сортировка одномерного массива #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
int a[] = {2,0,1,0,2,2,1,1,2,0,0,0,2,1,1,2,1,0,0,1,1,2,2,2,0,2,2,2,1,1,1,1};
 
void main()
{
    int offset_0 = 0, offset_1 = 0;
    for(int i = 0; i<(31-offset_1); ++i)
    {
        if(a[i] == 0)
        {
            std::swap(a[i], a[offset_0]);
            ++offset_0;
        }
        else if(a[i] == 1)
        {
            std::swap(a[i], a[31 - offset_1]);
            ++offset_1;
            --i;
        }
    }
 
    for(int i = 1; i<32; ++i)
        std::cout<<a[i]<<" ";
}
Что-нибудь похожее на это, например. В Функцию сам запихнешь, если что.
arialover
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 3
05.10.2012, 00:18  [ТС]     Сортировка одномерного массива #3
Спасибо!

Добавлено через 6 минут
Рано порадовался)
А для другого набора\количества элементов массива как быть?

Кликните здесь для просмотра всего текста
Цитата Сообщение от Vourhey Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int a[] = {2,0,1,0,2,2,1,1,2,0,0,0,2,1,1,2,1,0,0,1,1,2,2,2,0,2,2,2,1,1,1,1};
 
void main()
{
    int offset_0 = 0, offset_1 = 0;
    for(int i = 0; i<(31-offset_1); ++i)
    {
        if(a[i] == 0)
        {
            std::swap(a[i], a[offset_0]);
            ++offset_0;
        }
        else if(a[i] == 1)
        {
            std::swap(a[i], a[31 - offset_1]);
            ++offset_1;
            --i;
        }
    }
 
    for(int i = 1; i<32; ++i)
        std::cout<<a[i]<<" ";
}
Что-нибудь похожее на это, например. В Функцию сам запихнешь, если что.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
05.10.2012, 00:30     Сортировка одномерного массива #4
Цитата Сообщение от arialover Посмотреть сообщение
А для другого набора\количества элементов массива как быть?
Ну измени код на любое другое количество, в чем проблема-то? Ты вообще что ли ни одного символа напечатать сам не можешь?
arialover
0 / 0 / 0
Регистрация: 04.10.2012
Сообщений: 3
05.10.2012, 00:48  [ТС]     Сортировка одномерного массива #5
Цитата Сообщение от Vourhey Посмотреть сообщение
Ну измени код на любое другое количество, в чем проблема-то? Ты вообще что ли ни одного символа напечатать сам не можешь?
Ты меня не так понял. Я имею в виду возможность заполнения массива поэлементно с клавиатуры.
И задание размерности.

Когда я так делаю, то с твоим кодом получается целая куча чисел

Сортировка одномерного массива
co6ak
Кошковед
 Аватар для co6ak
402 / 495 / 29
Регистрация: 12.04.2010
Сообщений: 1,392
05.10.2012, 01:15     Сортировка одномерного массива #6
модератор, а не по стандарту ))

лупи динамический массив.
по типу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int main() {
    int* mas;
    int elements_number;
    std::cin << elements_number;
    mas = new int [elements_number];
    for ( int i = 0; i < elements_number;) {
         int x;
         std::cin << x;
         if ( x != 0 || x != 1 || x != 2 ) std::cout << "Input error! Only 0,1,2!";
         else { mas[i++] = x; }
    }
    // тут вставь сортировку. любую. хоть пузырек. 
    for(int i = 1; i<elements_number; ++i)
        std::cout<<mas[i]<<" ";
    std::cin.get().get();
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.10.2012, 04:03     Сортировка одномерного массива
Еще ссылки по теме:

C++ Сортировка одномерного массива
Сортировка одномерного массива C++
C++ Сортировка одномерного массива

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

Или воспользуйтесь поиском по форуму:
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.10.2012, 04:03     Сортировка одномерного массива #7
Цитата Сообщение от co6ak Посмотреть сообщение
модератор, а не по стандарту ))
Пишу, как считаю нужным.

Добавлено через 48 минут
arialover, еще такой вариант могу предложить:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int a[] = {2,0,1,0,2,2,1,1,2,0,0,0,2,1,1,2,1,0,0,1,1,2,2,2,0,2,2,2,1,1,1,1};
 
bool mysort(const int& a, const int& b)
{
    if(a==2 && b==1) return true;
    if(a==1 && b==2) return false;
    return a<b;
}
 
void main()
{
     std::sort(a, a+count, mysort);
Добавлено через 30 минут

Не по теме:

Хотя, mysort можно сократить до такого:

C++
1
2
    if(a!=0 && b!=0) return a>b;
    return a<b;

Yandex
Объявления
22.10.2012, 04:03     Сортировка одномерного массива
Ответ Создать тему
Опции темы

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