74 / 74 / 13
Регистрация: 21.10.2010
Сообщений: 376
1

Хитрая сортировка

06.12.2011, 14:34. Показов 2806. Ответов 4
Метки нет (Все метки)

Условие объясните, совсем не доходит до меня.

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

Заглушка:

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

Вывод:

20 1 12 13 43 15 15
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2011, 14:34
Ответы с готовыми решениями:

Хитрая задачка
Дано n и m - два целые числа (1 ≤ n, m ≤ 10^8). Надо: 1) Делить n (несмотря на остаток) до 1; 2)...

хитрая константа не даёт создать обычный массив
Почему я не могу создать обычный массив, указав константу в качестве количества элементов? int...

Хитрая сортировка
Из массива путем однократного просмотра выбирается последовательность элементов, расположенных в...

Хитрая сортировка
Ребят, сказали сделать программу с хитрой сортировкой, но в тырнетах нету даже информации о...

4
программист С++
841 / 600 / 147
Регистрация: 19.12.2010
Сообщений: 2,014
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;
}
0
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
06.12.2011, 15:36 3
Цитата Сообщение от Hi4ko Посмотреть сообщение
Условие объясните, совсем не доходит до меня.
алгоритм сортировки не зависит от условий и критериев, по которым сортируются элементы
например, если у вас есть сортировка по возрастанию, то где-то в ней
вы сравниваете два элемента с помощю оператора >, например, a > b
это можно заменить вызовом функции (компаратора), например, cmp(a, b)
и алгоритм сортировки от этого не изменится

поэтому вам нужно:
написать функцию для сравнения элементов
отсортировать последовательность любым алгоритмом, используя эту функцию
0
74 / 74 / 13
Регистрация: 21.10.2010
Сообщений: 376
07.12.2011, 03:13  [ТС] 4
уже всё сделали, спасибо)
0
Заблокирован
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;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.12.2011, 04:34
Помогаю со студенческими работами здесь

Хитрая сортировка многомерного массива
Добрый день. У меня есть массив children, следующей структуры: Array ( =&gt; Array (...

Сортировка "Хитрая"
Задание следующее: Из массива путем однократного просмотра выбирается последовательность элементов,...

Хитрая выдача
Добрый день. Столкнулись с такой проблемой: по запросу &quot;купить слона&quot; и сопутствующим НЧ в регионе...

Хитрая табличка
Есть такая проблема: Формирую я отчет по автомобилям на ремонте. на каждое авто может быть по...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru