Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Быстрая сортировка
очень эффективный алгоритм, и известна как в среднем самая быстрая из универсальных алгоритмов сортировки. Быстрая сортировка сравнивает все элементы массива с одним, выбранным практически наугад, элементом (опорным элементом) и тем самым делит массив на две части - в одну попадают числа меньшие опорного, а в другую - большие опорного. Затем каждая из этих двух частей также подвергается аналогичной сортировке, и так до тех пор, пока очередная часть не окажется состоящей из единственного элемента. Таким образом, быстрая сортировка - это рекурсивный алгоритм, то есть алгоритм вызывающий сам себя. Время быстрой сортировки пропорционально n*log(n). Однако, у алгоритма быстрой сортировки есть и недостатки. Массив случайных чисел сортируется очень быстро, однако только что отсортированный массив повторно процедура может обрабатывать крайне медленно, вплоть до полного исчерпания ёмкости стека, так как эффективность алгоритма крайне зависит от удачного выбора опорного элемента. Здесь интересен метод разделения массива относительно опорного элемента. Для этого используются два разнонаправленных процесса. Первый начинает от начала массива и ищет элемент, больший опорного. Второй начинает с конца и ищет элемент, меньший опорного. Как только такие элементы найдены, производится их обмен местами, и далее поиск продолжается с того места, где процессы остановились. Таким образом, когда процессы встречаются - это происходит где-то в середине массива - любой элемент в первой части меньше опорного, а во второй - больше. То есть, любой элемент в первой части меньше любого во второй. Это значит, что их уже сравнивать друг с другом не придётся. Остаётся только провести такую же операцию по отношению к этим двум половинам, и так далее, пока в очередной части массива не останется один элемент - это значит, что массив отсортирован. Лучшим выбором для опорного элемента является средний элемент в массиве. Поэтому нужно выбирать опорным элемент, имеющий средний индекс. Это позволяет минимизировать вероятность самого неблагоприятного выбора - наименьшего элемента в массиве. Ещё лучше в качестве опорного выбирать элемент со средним значением из элементов с первым, последним и средним индексом. Псевдокод алгоритма быстрой сортировки: Процедура QuickSort(A: массив, min - начальный индекс, max - конечный индекс); Вот реализация алгоритма быстрой сортировки: type TArray: Array of Integer; //Параметры массива нужно определить до вызова процедуры procedure qSort(var A: TArray; min, max: Integer);
|