Быстрый сортинг, также известный как разделение и сортировка обмена. Быстрый алгоритм сортировки, реализованный со стратегией деления и завоевания.
В этой статье в основном рассказывается об использовании JavaScript для реализации быстрого сортировки идей на месте.
Методы деления и лечения:
В информатике метод разделения и завоевания является очень важной парадигмой алгоритма, основанной на многочисленной рекурсии филиала. Буквальное объяснение является «делящим и завоеванием», что означает разделение сложной проблемы на две или более идентичные или аналогичные подзывники, пока не может быть просто и непосредственно решено, а решением исходной проблемы является слияние решений подпрограммы. (Выдержка из Википедии)
Идея быстрой сортировки
Укажите элемент в массиве в качестве линейки, поместите больше, чем он, и положите меньшую, чем он перед элементом, повторите это, пока все не будут расположены в положительном порядке.
Быстрая сортировка разделена на три шага:
Выберите эталон: выберите элемент в качестве эталона в структуре данных (Pivot)
Разделение: см. Размер значения эталонного элемента, разделите неупорядоченную область. Все данные, меньшие, чем эталонный элемент, размещены в одном интервале, и все данные больше, чем эталонный элемент, размещаются в другом интервале. После завершения операции разделения позицией эталонного элемента является позицией, где она должна быть после окончательной сортировки.
Рекурсия: рекурсивно вызовите алгоритмы на шаге 1 и на шаге 2 впервые, пока не останется только один элемент во всех неупорядоченных интервалах.
Теперь давайте поговорим о общих методах реализации (не используется алгоритм на месте)
Function QuickSort (arr) {if (arr.length <= 1) return; // пожалуйста, что цифровый эталон, ближайший к середине массива, нечетные числа и даже числа принимают значения, но я так не думаю. Конечно, вы можете выбрать первое или последнее число в качестве эталона, и здесь нет слишком большого описания var pivotindex = math.floor (arr.length/2); var pivot = arr.splice (pivotindex, 1) [0]; // левый и левый интерфейсы используются для хранения сортированных чисел vare = []; i = 0; {right.push (arr [i]); console.log ('right:' + (arr [i]))}} // Оператор CONGAT используется здесь, чтобы разбивать левый интервал, эталон и правый интервал в новый массив //, затем повторно 1 и 2 шага, пока все неупорядоченные интервалы не имеют только одного элемента, а рецибирующий конец возвращает QuickSort (налево). QuickSort (справа));} var arr = [14, 3, 15, 7, 2, 76, 11]; console.log (QuickSort (arr));/** Когда основание составляет 7, первый раздел получает с двумя подмножествами слева и справа [3, 2,] 7 [14, 15, 76, 11];* с базой 2, левая подраздел [3, 2]. sorting of the left subset ends* With the reference as 76, the right subset is divided and sorted to obtain [14, 15, 11] 76* At this time, the above [14, 15, 11] is divided and sorted to the above [14, 15, 11] is divided and sorted to the above [14, 11] is divided and sorted to the above [14, 11] is divided and sorted to the above [14, 11] is divided and sorted to the above [14, 11] делится и отсортируется на вышеупомянутое [11] делится и отсортируется на основание 11, 11 [14]*Есть только один элемент во всех неупорядоченных интервалах, и рекурсивный конец **//Благодаря отладке точек останова результаты можно получить.
Недостатки:
Требуется дополнительное пространство для хранения ω (n), что так же плохо, как сортировка слияния. В производственной среде требуется дополнительное пространство памяти, что влияет на производительность.
В то же время многие думают, что вышесказанное - очень быстрый вид. Поэтому ниже, необходимо порекомендовать быстрое сортировку алгоритма на месте.
Для получения информации об алгоритме на месте, пожалуйста, обратитесь к Википедии. Студенты, которые находятся под стеной, похожи на Baidu.
на месте
Быстрая сортировка обычно реализуется при рекурсии. Наиболее важным является функция сегментации разделения, которая делит массив на две части, одна меньше Pivot, а другая больше, чем Pivot. Конкретный принцип был упомянут выше
Функция QuickSort (arr) {// SWAP Function Swap (arr, a, b) {var temp = arr [a]; arr [a] = arr [b]; arr [b] = temp;} // Разделение функции разделения (arr, влево, справа) {/*** В начале вы не знаете окончательное место хранилища Pivot, вы можете подключить к обратному элементу. arr [справа];/*** При хранении элементов меньше, чем pivot, они находятся рядом с предыдущим элементом, в противном случае элемент, хранящийся в зазоре, может быть больше, чем Pivot,* Следовательно, переменная ShoreIndex объявляется и инициализируется слева, чтобы хранить элементы, меньшие, чем опорная рядом друг с другом. */var storeIndex = left; for (var i = left; i <right; i ++) {if (arr [i] <pivot) {/*** пересекать массив и найти элемент меньше, чем pivot, (элементы, большие, чем pivot, будут прокачены)* Поместите элемент, полученный при петле I, чтобы хранить, чтобы сохранить обмен, и Incrome resment reshipex mo nate with with word wat word wat a mame with with word wat a ind at ind as wat ind wat a ind and wat a ind and to ind wat a ind a ind a a a worm with wrish worp earch Поменуется*/swap (arr, storeIndex, i); storeIndex ++;}} // Наконец: Shap Pivot to StoreIndex, поместите контрольный элемент в конечном правильном подсадке правильного положения (ARR, справа, storeIndex); return storeIndex;} Сорта функций (ARR, влево, справа) {если (слева> справа) return; 1); Sort (arr, storeIndex + 1, справа);} sort (arr, 0, arr.length - 1); return arr;} console.log (QuickSort ([8, 4, 90, 8, 34, 67, 1, 26, 17]));Оптимизация разделения
Тщательные студенты здесь могут спросить, будет ли при выборе различных тестов. Ответ-да, но потому, что я являюсь лидером, и мало что знаю об алгоритме, поэтому эта яма остается мощным людям, чтобы заполнить.
Сложность
Быстрая сортировка - самый быстрый алгоритм сортировки, а его сложность - O (log n)
В средней ситуации порядок n элементов требует сравнения (n log n). В худшем случае требуются сравнения (N2).
https://github.com/lyz0106/
Выше приведено метод быстрой сортировки реализации JavaScript In идей, представленные редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение. Редактор ответит вам вовремя. Большое спасибо за вашу поддержку веб -сайта Wulin Network!