Результаты поиска
Как вы сортируете словарь по значению?
Мне часто приходится сортировать словарь, состоящий из ключей & значений, по значению. Например, у меня есть hash слов и соответствующих частот, которые я хочу упорядочить по частоте.
Есть SortedList , который хорош для одного значения (скажем, частоты), и я хочу сопоставить его со словом.
SortedDictionary заказы по ключу, а не по значению. Некоторые прибегают к пользовательскому классу, но есть ли более чистый способ?
Строгость в захвате тестовых случаев для модульного тестирования
Допустим, у нас есть простая функция, определенная на псевдо-языке.
List<Numbers> SortNumbers(List<Numbers> unsorted, bool ascending);
Мы передаем несортированный список чисел и логическое значение, указывающее порядок сортировки по возрастанию или убыванию. Взамен мы получаем упорядоченный список чисел.
По моему опыту, некоторые люди лучше улавливают граничные условия, чем другие. Вопрос заключается в следующем:"как вы узнаете, когда вы 'done' захватываете тестовые случаи"?
Мы можем начать перечислять случаи сейчас, и какой-нибудь умный человек, несомненно, подумает о 'one more' случае, который не охватывается ни одним из предыдущих.
Как ранжировать массив (Сортировать) по значению? *With в twist*
Я хотел бы отсортировать массив в порядке возрастания, используя C/C++ . Результатом является массив, содержащий индексы элементов. Каждый индекс соответствует расположению элемента в отсортированном массиве.
Пример
Input: 1, 3, 4, 9, 6
Output: 1, 2, 3, 5, 4
Edit: я использую процедуру сортировки shell. Индексы повторяющихся значений выбираются произвольно, исходя из того, какие повторяющиеся значения являются первыми в исходном массиве.
Обновление:
Несмотря на все мои усилия, я не смог реализовать алгоритм сортировки для массива указателей. Текущий пример не будет компилироваться.
Может, кто-нибудь объяснит мне, что случилось?
Я был бы очень признателен за помощь!
void SortArray(int ** pArray, int ArrayLength)
{
int i, j, flag = 1; // set flag to 1 to begin initial pass
int * temp; // holding variable orig with no *
for (i = 1; (i <= ArrayLength) && flag; i++)
{
flag = 0;
for (j = 0; j < (ArrayLength - 1); j++)
{
if (*pArray[j + 1] > *pArray[j]) // ascending order simply changes to <
{
&temp = &pArray[j]; // swap elements
&pArray[j] = &pArray[j + 1]; //the problem lies somewhere in here
&pArray[j + 1] = &temp;
flag = 1; // indicates that a swap occurred.
}
}
}
};
Сортировка IList в C#
Так что сегодня я столкнулся с интересной проблемой. У нас есть веб-служба WCF, которая возвращает IList. На самом деле ничего особенного, пока я не захотел разобраться с этим.
Оказывается, интерфейс IList не имеет встроенного метода сортировки.
В конечном итоге я использовал метод ArrayList.Adapter(list).Sort(new MyComparer()) , чтобы решить эту проблему, но он просто показался мне немного "ghetto".
Я играл с написанием метода расширения, а также с наследованием от IList и реализацией моего собственного метода Sort(), а также приведением к списку, но ни один из них не казался слишком элегантным.
Поэтому мой вопрос заключается в том, есть ли у кого-нибудь элегантное решение для сортировки IList
Как я могу написать вид хуже, чем O (n!)
Я написал O (n!) сортировка для моего развлечения, которое не может быть тривиально оптимизировано, чтобы работать быстрее, не заменяя его полностью. [И нет, я не просто рандомизировал элементы, пока они не были отсортированы].
Как я мог бы написать еще худший вид Big-O, не просто добавляя посторонний мусор, который можно было бы вытащить, чтобы уменьшить сложность времени?
http://en.wikipedia.org/wiki/Big_O_notation имеет различные временные сложности, отсортированные в порядке возрастания.
Edit: я нашел код, вот мой O (n!) детерминированная сортировка с забавным хак для создания списка всех комбинаций списка. У меня есть немного более длинная версия get_all_combinations, которая возвращает итерацию комбинаций, но, к сожалению, я не мог сделать это одним оператором. [Надеюсь, я не ввел ошибки, исправляя опечатки и удаляя подчеркивания в приведенном ниже коде]
def mysort(somelist):
for permutation in get_all_permutations(somelist):
if is_sorted(permutation):
return permutation
def is_sorted(somelist):
# note: this could be merged into return... something like return len(foo) <= 1 or reduce(barf)
if (len(somelist) <= 1): return True
return 1 > reduce(lambda x,y: max(x,y),map(cmp, somelist[:-1], somelist[1:]))
def get_all_permutations(lst):
return [[itm] + cbo for idx, itm in enumerate(lst) for cbo in get_all_permutations(lst[:idx] + lst[idx+1:])] or [lst]
Почему **sort** не сортирует то же самое на каждой машине?
Использование одной и той же команды сортировки с одинаковыми входными данными приводит к различным результатам на разных машинах. Как мне это исправить?