Мне аж стало интересно. Давайте выведем эту задачу в отдельный пост. Допустим, что у тебя есть массив сотрудников некой компании и нужно отсортировать всех по возрасту. Варианты решения задачи пожалуйста в комментарии. Меня интересует именно возраст, а не дата рождения. Код мне не нужен, просто идею, как будем сортировать такие данные.
Понравилось? Кликни Лайк, чтобы я знал, какой контент более интересен читателям. Заметку пока еще никто не лайкал и ты можешь быть первым
Можно так https://glot.io/snippets/ekqspq1vpn
Код показывать не обязательно, достаточно рассказать идею
Поскольку Возраст сотрудника есть целое числ о от 0 до 100(вряд ли кто-то старше 100 лет работает), то можно применить сортировку подсчетом (завести массив из 100 элементов и инкриментить i тый элемент)
В 0 лет тоже врятли кто-то работает, но так как если никто не попадет в эту ячейку память расходоваться не будет, то можно забить на это дело. Меня интересует сортировка, а не подсчет, но твою идею надеюсь уже народ сможет довести до сортировки? Кто-то тут в предыдущем моем посте спрашивал, как можно отсортировать в один проход, теперь надеюсь ясно? После первого прохода получаем массив массивов, а вторым проходом можем превратить этот массив массивов в простой список.
Без кода сложновато обяснить... Сам же подсказку даешь
А что тут сложного, объяснение Joanne поместилось в 2 строчки и меня устроит этот ответ. К тому же он не является обязательным. Если человек расскажет мне хотя бы идею, как работает Quick Search, этого мне хватит тоже.
Ну да, довести легко, собственно ты и довел. Хорошая задача, перед решением любой задачи нужно хорошо проанализировать входные данные (в данном не бросаться на "самую быструю" QuickSort). Ну а собственно сортировка подсчетом работает когда диапазон числовых целых данных ограничен (не обязательно только неотрицательными числами).
Может лучше использовать хеш-таблицу? Или я тупой?
Словесный алгоритм:
Смотрим запись сотрудника и узнаем его возраст.
Ищем в хеш-таблице ключ равный вычисленному возрасту
Если такой ключ есть, то присваиваем ему значение сотрудника
Если такого ключа нет, то создаем новый ключ и присваиваем ему значение сотрудника
Это троллинг или вопрос?
Хэш нужен когда сложные данные или большой разброс в данных. Тут максимальный разброс в 100 баллов. Проще создать простой массив и обращаться к элементам по индексу, а не по хэшу
а чем не устраивает сразу выбрать из базы что то типа
select id, datediff(years from start_date to cast('NOW' as date)) as age from employees order by age desc(это на фаерберде)
и получить набор объектов работников в отсортированном порядке? или я неправильно понял задачу?
кстати натолкнулся на проблемку, если сортить массивы вставками(insertion) и выборками(selection) то выборка работает быстрее чем вставка. хотя выборка должна работать медленнее? я заслуженный рукожоп или как?
Radekk, простых путей мы не ищем или см. предыдущий пост про собеседование при приеме на работу.
Если у нас имеется массив сотрудников(имя,фамилия, возраст), то скорее всего лучше будет использовать структуру.
А алгоритм функции сортировки по моему мнению должен быть таким, необходимо 2 цикла, причем эти 2 цикла будут работать в одном и том же массиве, в первом цикле мы берем по очередности элементы массива, допустим взяли 1-ый элемент массива, и ищем число большее чем оно (поиск будет происходить во вложенном цикле, поиск должен нам вернуть само значение, и его индекс).
Как только оно найдено(если оно есть) то назначаем индексу 0 массива найденное нами большее число, а индексу массива только что найденного нами большего числа назначаем наоборот значение бывшего 1-го нашего элемента массива.Или другими словами мы меняем их(значения) местами.
Далее, опять, берем 2-ой элемент массива, вложенный цикл вернет нам число >= нашему 2-му элементу, найденное большее число делаем 2-ым элементом нашего массива, а бывшее значение 2-го элемента мы возвращаем на место индекса только что найденного большего числа.
И т.д. по всему оставшемуся массиву
во вложенном цикле алгоритм поиска должен быть таким:
в цикле берем 1-ый элемент массива, делаем его макс.числом, далее сравниваем его со 2-ым элементом, если 2-ой элемент больше чем 1-ый, делаем его (2-ой элемент) макс.числом, далее сравниваем с 3-им, 4-ым и т.д со всеми оставшимися элементами массива.
Чуть позже приложу код.
Код на С#:
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;
}
Хотите найти еще что-то интересное почитать? Можно попробовать отфильтровать заметки на блоге по категориям.