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

Хитрая сортировка - C++

Восстановить пароль Регистрация
 
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
06.12.2011, 14:34     Хитрая сортировка #1
Условие объясните, совсем не доходит до меня.

Дана последовательность чисел. Нужно упорядочить эти числа по возрастанию последней цифры, а при равенстве последних цифр - по неубыванию самих чисел.

Заглушка:

Ввод
7
12 15 43 13 20 1 15

Вывод:

20 1 12 13 43 15 15
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.12.2011, 14:34     Хитрая сортировка
Посмотрите здесь:

C++ Сортировка.
C++ Сортировка
C++ сортировка
Сортировка C++
хитрая константа не даёт создать обычный массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
06.12.2011, 14:48     Хитрая сортировка #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
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <cstdlib>
#include <functional>
 
template <typename T>
struct sorter :
        public std::binary_function<T, T, bool>
{
    bool operator() (const T& a, const T& b) const
    {
        T aa = a % 10, bb = b % 10;
        if (aa != bb)
            return aa < bb;
        else
            return a < b;
    }
};
 
int main()
{
    unsigned int size;
    std::cout << "Enter the N" << std::endl;
    std::cin >> size;
 
    std::vector<int> vector(size);
 
    std::cout << "Enter the vector" << std::endl;
    for (std::vector<int>::iterator i = vector.begin(), end = vector.end(); i != end; ++i)
        std::cin >> *i;
 
    std::sort(vector.begin(), vector.end(), sorter<int>());
 
    std::copy(vector.begin(), vector.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    return EXIT_SUCCESS;
}
Net_Wanderer
235 / 208 / 19
Регистрация: 08.06.2011
Сообщений: 467
06.12.2011, 15:36     Хитрая сортировка #3
Цитата Сообщение от Hi4ko Посмотреть сообщение
Условие объясните, совсем не доходит до меня.
алгоритм сортировки не зависит от условий и критериев, по которым сортируются элементы
например, если у вас есть сортировка по возрастанию, то где-то в ней
вы сравниваете два элемента с помощю оператора >, например, a > b
это можно заменить вызовом функции (компаратора), например, cmp(a, b)
и алгоритм сортировки от этого не изменится

поэтому вам нужно:
написать функцию для сравнения элементов
отсортировать последовательность любым алгоритмом, используя эту функцию
Hi4ko
74 / 74 / 4
Регистрация: 21.10.2010
Сообщений: 376
07.12.2011, 03:13  [ТС]     Хитрая сортировка #4
уже всё сделали, спасибо)
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
07.12.2011, 04:34     Хитрая сортировка #5
вариант
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
48
49
50
51
52
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
 
int comp(const void *i, const void *j){
  return *(int *)i - *(int *)j;
}
 
int main( void )
{
    int size = 10;
    int *arr, *tmp;
    int t, n;
    srand(time(0));
 
    if ( (arr = (int *) malloc(size * sizeof(int))) == NULL)
        return EXIT_FAILURE;
    if ( (tmp = (int *) malloc(size * sizeof(int))) == NULL)
        return EXIT_FAILURE;
 
    for ( int i = 0; i < size; ++i)
    {
        arr[ i ] = rand() % (2 * size);
        printf("%2i ", arr[ i ]);
    }
    puts("");
 
    t = arr[ size - 1 ];
 
    qsort(arr, size, sizeof(int), comp);
 
    for (int i = size - 1; i >= 0; --i)
        if ( arr[ i ] == t )
        {
            n = i;
            break;
        }
 
    memcpy(tmp, (arr + n + 1), sizeof(int) * ( size - n - 1 ) );
    memcpy( (arr + size - n - 1),  arr, sizeof(int) * ( n + 1 ) );
    memcpy( arr, tmp, sizeof(int) * ( size - n - 1 ) );
 
    for (int i = 0; i < size; ++i)
        printf("%2i ", arr[ i ]);
    puts("");
 
    free(arr);
    free(tmp);
 
    return EXIT_SUCCESS;
}
Yandex
Объявления
07.12.2011, 04:34     Хитрая сортировка
Ответ Создать тему
Опции темы

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