ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
28 ноября
170575 Топик полностью
Ксения (29.10.2009 01:45 - 02:20, просмотров: 338) ответил Alex B. на Как найти медиану, не сортируя массив (не меняя порядок элементов) и не используя вспомогательный массив?
Вот этот код вычисляет у меня медиану:  int median( int temp[], int length) { int slit = length/2; for( int i=0; i < length; i++) { int s1=0, s2=0; int val = temp[i]; for( int j=0; j < length; j++) { if( temp[j] < val) { if( ++s1 > slit) goto nexti; } else if( temp[j] > val) { if( ++s2 > slit) goto nexti; } } return val; nexti: } return 0; // формальность, досюда никогда не доходит. } где: temp[] - массив, в котором ищется медиана length - число элементов в массиве temp[] Здесь последовательно перебираются элементы массива temp[], как кандидаты на звание медианы. Сравнивая кандидата со всеми остальными элементами, мы отдельно считаем число тех, кто меньше его (s1), и число тех, кто больше его (s2). Кандидат сразу объявляется победителем (следующие за ним кандидатуры более не рассматриваются), если по окончании его сравнения с остальными ни одно из чисел s1 и s2 не превысило половину от количества элементов в массиве. Перебор организован так, что достижение такого перебора по любому из чисел s1 или s2 в процессе сравнения немедленно снимает кадидата с гонки, прекращая его сравнение с остальными (goto nexti), и начинает рассматриваться следующая по списку кандидатура. P.S. Я этот способ когда-то сама придумала и сама запрограммировала на аcсеблере x86 (нужна была медианная фильтрация больших массивов).