КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Сортировка файлов методом прямого слияния
Сравнение методов сортировки массивов Функция быстрой сортировки void quicksort(int numbers[], int array_size) { q_sort(numbers, 0, array_size - 1); } void q_sort(int numbers[], int left, int right) { int pivot, l_hold, r_hold; 1 hold = left; r_hold = right; pivot = numbers[left]; while (left < right) { while ((numbers[right] >= pivot) && (left < right)) right--; if (left!= right) { numbers[left] = numbers[right]; left++; } while ((numbers[left] <= pivot) && (left < right)) left++; if (left!= right) { numbers[right] = numbers[left]; right--; } } numbers[left] = pivot; pivot = left; left = l_hold; right = r_hold; if (left < pivot) q_sort(numbers, left, pivot-1); if (right > pivot) q_sort(numbers, pivot+1, right); } Анализ алгоритма [3]. Ожидаемое число обменов равно (п - \1п)1в. Если предположить, что в качестве разрешающего элемента всегда выбирается медиана, то каждое разделение разбивает массив на две равные части, и число проходов, необходимых для сортировки, равно log п. Тогда общее число сравнений составит и-log «, а общее число обменов — (w/6)-log п. Вероятность попадания на медиану составляет \1п. Однако, если граница выбирается случайным образом, эффективность алгоритма в среднем хуже оптимального варианта лишь в 2-In 2 раз. Основной недостаток алгоритма — недостаточно высокая производительность при небольших п. Сравним эффективность методов сортировки массивов. Для всех прямых методов сортировки можно дать точные аналитические формулы [3]. Они представлены в табл. 3.5. Для усовершенствованных методов сортировки нет простых и точных формул. Существенно, однако, что в случае сортировки Шелла вычислительные затраты составляют с-п ', а для пирамидальной и быстрой сортировок — с и log п, где с — соответствующий коэффициент. Опытным путем были получены следующие результаты [3]: 1. Пузырьковая сортировка наихудший метод из всех сравниваемых. 2. Быстрая сортировка лучше в 2—3 раза, чем пирамидальная. Она сортирует массив, расположенный в обратном порядке, практически с той же скоростью, что и уже упорядоченный. Таблица 3.5 Сравнение прямых методов сортировки
Алгоритмы сортировки, рассмотренные ранее, неприменимы, если сортируемые данные расположены в файле с последовательным доступом (на диске), который характеризуется тем, что в каждый момент имеется непосредственный доступ к одному и только одному компоненту [1, 3, 9, 10, 13]. Основной применяемый метод — сортировка слиянием. Слияние означает объединение двух (или более) последовательностей в одну упорядоченную последовательность при помощи циклического выбора элементов, доступных в данный момент. Одна из сортировок на основе слияния называется сортировкой простым слиянием. Метод заключается в следующем [3]: 1. Последовательность а разбивается на две половины: b ис. 2. Последовательности b ис сливаются при помощи объединения отдельных элементов в упорядоченные пары. 3. Полученной последовательности присваивается имя а, и повторяются шаги 1 и 2; на этот раз упорядоченные пары сливаются в упорядоченные четверки. 4. Предыдущие шаги повторяются: четверки сливаются в восьмерки и так далее, пока не будет упорядочена вся последовательность.
Дата добавления: 2014-11-29; Просмотров: 625; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |