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

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

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

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

29.12.2010, 17:55. Просмотров 573. Ответов 16
Метки нет (Все метки)

Нужна помощь с этой задачей:
Дано произвольное целое положительное число K (K<10^9). Вывести цифры этого числа в порядке неубывания (например, 546085 =>045568). Процедуры и функции работы со строками не использовать.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2010, 17:55     Сортировка
Посмотрите здесь:

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка) - C#
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом массиве. Класс описать с помощью...

Блок схема.Сортировка «Пузырьком», Сортировка методом «Последовательных перестановок», Сортировка «Вставками» - Pascal
Помогите, нужны блок схемы Сортировка «Вставками» Program Vstavka; uses dos; Type mass=array of integer; Var i,b,n,j,a:...

Разработать программу сортировки: сортировка перестановкой, сортировка вставкой, быстрая сортировка - Prolog
Задание: Разработать программу сортировки: - сортировка перестановкой - сортировка вставкой - быстрая сортировка

1)Бинарный поиск 2)Сортировка включением 3)Шейкерная сортировка 4)Сортировка разделением - Pascal
1)В заданном массиве К(N) найти индексы элементов, которые кратны минимальному значению элемента массива. 2)Задан массив AX (N). Добавить...

Сортировка массива целых чисел A(n) по убыванию(используя метод обменная сортировка) - Turbo Pascal
Помогите написать программу для сортировки массива целых чисел A(n) по убыванию(используя метод обменная сортировка). Или хотя бы без этого...

Сортировка Шелла. Написал программу, не могу понять, почему сортировка не выполняется - C++
Программа создает динамический массив с рандомным заполнением. Дальше выбор сортировок, пузырьком или сортировка Шелла. Вот она то и не...

Быстрая сортировка, ситуация, при которой сортировка работает не корректно - Turbo Pascal
Procedure sort(m, l: Integer); Var i, j, x, w: Integer; Begin i := m; j := l; x := ar; Repeat While...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
29.12.2010, 18:23     Сортировка #2
Не понял... Строки не использовать???
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:29  [ТС]     Сортировка #3
Алексaндр, ну не использовать функции типа: strcpy(), strcat(), strcmp().
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
29.12.2010, 18:30     Сортировка #4
http://codepad.org/2dVPMTud
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
#include <vector>
#include <algorithm>
 
int main() {
    int n = 148450216;
    std::vector<int> v;
    while ( n ) v.push_back( n % 10 ), n /= 10;
    sort( v.begin(), v.end() );
    for( size_t i = 0; i < v.size(); ++i ) std::cout << v[ i ];
    std::cout << std::endl;
}
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:34  [ТС]     Сортировка #5
outoftime, а в более простом для начинающего виде можно? Ну там с printf и без std, vector и прочим.
outoftime
║XLR8║
508 / 430 / 33
Регистрация: 25.07.2009
Сообщений: 2,295
29.12.2010, 18:39     Сортировка #6
(: все-ровно преподов надули, не смотря на то что строки запретили юзать (:

Добавлено через 36 секунд
Sharkerator, можно, но тогда будет больше кода (:

Добавлено через 1 минуту
Sharkerator, попроси кого-то другого, мне не охота писать некрасивый код
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
29.12.2010, 18:41     Сортировка #7
Вот, функции и процедуры для работы со строками не использовал, все ручками-с Проверки на корректность вводимого числа нет:
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
#include <stdio.h>
#include <stdlib.h>
 
int cmp(const void* a, const void* b)
{
    char A = *(char*) a;
    char B = *(char*) b;
    if(A < B)
        return 1;
    if(B < A)
        return -1;
    return 0;
}
 
int main()
{
    char buf[9];
    size_t k = 0;
    unsigned long long num;
    printf("Input num: ");
    scanf("%Lu", &num);
    
    if(num >= 1000000000)
    {
        fprintf(stderr, "Illegal number: %Lu\n", num);
        exit(1);
    }
    
    while(num)
    {
        buf[k++] = num % 10 + '0';
        num /= 10;
    }
    
    qsort(buf, k, sizeof(char), cmp);
    
    while(k)
        putchar(buf[--k]);
        
    putchar('\n');
        
    
    exit(0);
}
UPD, добавил проверку числа
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:44  [ТС]     Сортировка #8
outoftime, мне главное понять что написано, а красота и размер сейчас не так важны.


Nameless One, вот тут уже больше понятного, но можно как-нибудь сделать, не используя подпрограмму?
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
29.12.2010, 18:50     Сортировка #9
Sharkerator, можно, нужно просто самому написать сортировку. Как это сделать - смотрим в этой теме.

Цитата Сообщение от Sharkerator Посмотреть сообщение
можно как-нибудь сделать, не используя подпрограмму?
Кстати, а чем, собственно, подпрограммы не угодили?...
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 18:55  [ТС]     Сортировка #10
Nameless One, препод заподозрит неладное, что я решил задачу, да еще и с помощью подпрограммы.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
29.12.2010, 18:58     Сортировка #11
Sharkerator, так в условии задачи ничего не сказано про то, что нельзя их использовать. А то, что не запрещено - разрешено
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 19:02  [ТС]     Сортировка #12
Nameless One, да не в этом дело. Просто я в подпрограммах не разбираюсь и не смогу объяснить преподу как я решил задачу. И он скажет, что я нагло списал.
Nameless One
Эксперт С++
5769 / 3418 / 255
Регистрация: 08.02.2010
Сообщений: 7,446
29.12.2010, 19:07     Сортировка #13
А ты разберись
Sharkerator
0 / 0 / 0
Регистрация: 29.12.2010
Сообщений: 16
29.12.2010, 19:10  [ТС]     Сортировка #14
Nameless One, к сожалению, пока моего мозга на это не хватает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.12.2010, 19:19     Сортировка
Еще ссылки по теме:

Сортировка слиянием. В каком куске кода происходит сортировка и каким именно образом? - C++
Помогите, пожалуйста, разобраться. Подскажите в каком куске кода происходит сортировка и каким именно образом? #include &lt;iostream&gt; ...

Сортировка векторов методами: пузырька, Хоара, Шейкерная сортировка - C (СИ)
Сортировка векторов методами: пузырька, Хоараб, Шейкерная сортировка Каждый отдельный алгоритм должен быть оформлен в виде функции,...

Сортировка пирамидой: Вычислить сколько шагов сделала сортировка - PascalABC.NET
Есть код сортировки пирамидой, как теперь вычислить сколько шагов сделала сортировка прежде чем программа закончила работу, желательно с...

Работа с простейшими массивами: 1)сортировка; 2)определение суммы и сортировка - C#
1)Класс описывает одномерный массив, состоящий из n целых элементов со значениями в диапазоне от (0 до 100). Методы класса должны: менять...

Быстрая сортировка (сортировка Хоара) для связных списков - C++
есть у кого готовый алгоритм? или подскажите как реализовать


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

Или воспользуйтесь поиском по форуму:
asics
Freelance
Эксперт С++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,841
29.12.2010, 19:19     Сортировка #15
Вот без функций
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
#include <stdio.h>
#include <malloc.h>
 
int main()
{
    int N, _N, *a, cnt = 0, k = 0;
    scanf("%d", &N);
 
    _N = N;
    while(_N)
    {
        int tmp = _N % 10;
        ++cnt;
        _N /= 10;
    }
 
    a = (int *)malloc(sizeof(int) * cnt);
    _N = N;
    while(_N)
    {
        a[k++] = _N % 10;
        _N /= 10;
    }
 
    for(int i = 0; i < cnt; ++i)
    {
        for(int j = i; j < cnt - 1; ++j)
        {
            if(a[j] > a[j + 1])
            {
                int tmp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = tmp;
            }
        }
    }
 
    for(int i = 0; i < cnt; ++i)
        printf("%d", a[i]);
}
Yandex
Объявления
29.12.2010, 19:19     Сортировка
Ответ Создать тему
Опции темы

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