Как отсортировать по возрасту

15 0

Мне аж стало интересно. Давайте выведем эту задачу в отдельный пост. Допустим, что у тебя есть массив сотрудников некой компании и нужно отсортировать всех по возрасту. Варианты решения задачи пожалуйста в комментарии. Меня интересует именно возраст, а не дата рождения. Код мне не нужен, просто идею, как будем сортировать такие данные. 


Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым


Комментарии

Alexander

28 Ноября 2016

Можно так https://glot.io/snippets/ekqspq1vpn


Михаил Фленов

28 Ноября 2016

Код показывать не обязательно, достаточно рассказать идею


Joanne

28 Ноября 2016

Поскольку Возраст сотрудника есть целое числ о от 0 до 100(вряд ли кто-то старше 100 лет работает), то можно применить сортировку подсчетом (завести массив из 100 элементов и инкриментить i тый элемент)


Михаил Фленов

28 Ноября 2016

В 0 лет тоже врятли кто-то работает, но так как если никто не попадет в эту ячейку память расходоваться не будет, то можно забить на это дело. Меня интересует сортировка, а не подсчет, но твою идею надеюсь уже народ сможет довести до сортировки? Кто-то тут в предыдущем моем посте спрашивал, как можно отсортировать в один проход, теперь надеюсь ясно? После первого прохода получаем массив массивов, а вторым проходом можем превратить этот массив массивов в простой список.


Темирхан

28 Ноября 2016

Без кода сложновато обяснить... Сам же подсказку даешь


Михаил Фленов

28 Ноября 2016

А что тут сложного, объяснение Joanne поместилось в 2 строчки и меня устроит этот ответ. К тому же он не является обязательным. Если человек расскажет мне хотя бы идею, как работает Quick Search, этого мне хватит тоже.


Joanne

29 Ноября 2016

Ну да, довести легко, собственно ты и довел. Хорошая задача, перед решением любой задачи нужно хорошо проанализировать входные данные (в данном не бросаться на "самую быструю" QuickSort). Ну а собственно сортировка подсчетом работает когда диапазон числовых целых данных ограничен (не обязательно только неотрицательными числами).


Тролль

29 Ноября 2016

Может лучше использовать хеш-таблицу? Или я тупой?

Словесный алгоритм:
Смотрим запись сотрудника и узнаем его возраст.
Ищем в хеш-таблице ключ равный вычисленному возрасту
Если такой ключ есть, то присваиваем ему значение сотрудника
Если такого ключа нет, то создаем новый ключ и присваиваем ему значение сотрудника


Михаил Фленов

29 Ноября 2016

Это троллинг или вопрос?


Тролль

29 Ноября 2016

Это троллинг или вопрос?

Мне просто интересно, могу ли я решить простую задачку или я все еще — малолетний дебил. И к чему вообще этот пост с задачкой? Почему
Мне аж стало интересно
?


Михаил Фленов

29 Ноября 2016

Хэш нужен когда сложные данные или большой разброс в данных. Тут максимальный разброс в 100 баллов. Проще создать простой массив и обращаться к элементам по индексу, а не по хэшу


Radekk

30 Ноября 2016

а чем не устраивает сразу выбрать из базы что то типа
select id, datediff(years from start_date to cast('NOW' as date)) as age from employees order by age desc(это на фаерберде)
и получить набор объектов работников в отсортированном порядке? или я неправильно понял задачу?
кстати натолкнулся на проблемку, если сортить массивы вставками(insertion) и выборками(selection) то выборка работает быстрее чем вставка. хотя выборка должна работать медленнее? я заслуженный рукожоп или как?


Евгений

01 Декабря 2016

Radekk, простых путей мы не ищем или см. предыдущий пост про собеседование при приеме на работу.


Бадеев Андрей

30 Декабря 2016

Если у нас имеется массив сотрудников(имя,фамилия, возраст), то скорее всего лучше будет использовать структуру.
А алгоритм функции сортировки по моему мнению должен быть таким, необходимо 2 цикла, причем эти 2 цикла будут работать в одном и том же массиве, в первом цикле мы берем по очередности элементы массива, допустим взяли 1-ый элемент массива, и ищем число большее чем оно (поиск будет происходить во вложенном цикле, поиск должен нам вернуть само значение, и его индекс).
Как только оно найдено(если оно есть) то назначаем индексу 0 массива найденное нами большее число, а индексу массива только что найденного нами большего числа назначаем наоборот значение бывшего 1-го нашего элемента массива.Или другими словами мы меняем их(значения) местами.
Далее, опять, берем 2-ой элемент массива, вложенный цикл вернет нам число >= нашему 2-му элементу, найденное большее число делаем 2-ым элементом нашего массива, а бывшее значение 2-го элемента мы возвращаем на место индекса только что найденного большего числа.

И т.д. по всему оставшемуся массиву

во вложенном цикле алгоритм поиска должен быть таким:
в цикле берем 1-ый элемент массива, делаем его макс.числом, далее сравниваем его со 2-ым элементом, если 2-ой элемент больше чем 1-ый, делаем его (2-ой элемент) макс.числом, далее сравниваем с 3-им, 4-ым и т.д со всеми оставшимися элементами массива.

Чуть позже приложу код.


Бадеев Андрей

30 Декабря 2016

Код на С#:
static int[] Maxima(params int[] intArray)
        {
            int maxch = 0, maxoldch = 0, index = 0;
            
            for (int i = 0; i < intArray.Length; i++)
            {
                maxch = intArray;
                maxoldch = maxch; //запоминаем старое значение макс.числа
                
                for (int f = i; f < intArray.Length; f++)
                {
                    if (maxch < intArray[f])
                    {
                        maxch = intArray[f];
                        index = f; // индекс нового макс.числа
                    }
                    else if (maxch == maxoldch)
                    {
                        index = i;
                    }
                }
                intArray = maxch;
                intArray[index] = maxoldch;
                
            }
            return intArray;
        }


Добавить Комментарий

О блоге

Программист, автор нескольких книг серии глазами хакера и просто блогер. Интересуюсь безопасностью, хотя хакером себя не считаю

Обратная связь

Без проблем вступаю в неразборчивые разговоры по e-mail. Стараюсь отвечать на письма всех читателей вне зависимости от страны проживания, вероисповедания, на русском или английском языке.

Пишите мне