Bubble Сортировка
Для сравнения и обмена соседних элементов, каждый проход , так что цикл не может найти максимум или минимум отсортированного массива.
Лучше всего: O(n)
нужен только один массив пузырьков на заказ.
Худший: O (n²)
Средний балл: O (n²)
* Single пузырь
function bubbleSort(nums) {
for (let i=0 , len=nums.length; i<len-1; i++) {
//如果一轮比较中没有需要交换的数据,则说明数组已经有序,主要是为了对[5,1,2,3,4]之类的数组进行优化。
let mark = true;
for (let j = 0; j < len-i-1; i++) {
if (nums[j] > nums[j+1]) {
[nums[j],nums[j+1]] = [nums[j+1],nums[j]]
mark = false
}
}
if (mark) return nums
}
}
Двунаправленный пузырь
Обычный цикл пузырьковой сортировки в поездке только найти максимум или минимум, двунаправленная пузырь более одного цикла только выяснить максимальное значение также может найти минимальное значение
function bubbleSort_twoWays(nums) {
let low = 0
let high = nums.length - 1
while(low < high) {
let mark = true
// 找到最大值放到到右边
for (let i=low; i<high; i++) {
if(nums[i] > nums[i+1]) {
[nums[i],nums[i+1]] = [nums[i+1],nums[i]]
mark = false
}
}
high--
// 找到最小值放到左边
for(let j=high;j>low;j--) {
if(nums[j] < nums[j-1]) {
[nums[j],nums[j-1]] = [nums[j-1],nums[j]]
mark = false
}
}
low++
if(mark) return nums
}
}
Выбор Сортировка
И пузырьковая сортировка аналогична, за исключением того, что сортировка выбрана элемент и каждый из его последующих сравнения и обмена элементов.
Предпочтительно: O (N²)
Худший: O (N²)
Среднее: О (N²)
function selectSort(nums) {
for (let i = 0, len = nums.length; i < len; i++) {
for (let j = i + 1; j < len; j++) {
if (nums[i] > nums[j]) {
[nums[i], nums[j]] = [nums[j], nums[i]]
}
}
}
return nums
}
Вставка рода
к первому элементу в виде упорядоченного массива, с помощью последующих элементов найти подходящее место в массиве было заказано и вставить.
Лучше: O(n)
исходный массив уже по возрастанию.
Худшие: O(n²)
Средний балл:O(n²)
function insertSort(nums) {
for (let i = 1,len = nums.length;i < len; i++) {
let temp = nums[i]
let j = i
while (j >= 0 && temp < nums[j-1]) {
nums[j] = nums[j-1]
j--
}
nums[j] = temp
}
return nums
}
Быстрая сортировка
Выберите элемент в качестве основы (как правило, первый элемент), базовый элемент меньше, чем слева в нее, больше, чем базовый элемент в его вправо (эквивалент 22 минут), а затем продолжить рекурсивно последовательности оснований с обеих сторон слева и справа.
Предпочтительно: О (п * LOGN), все числа , равномерно распределенные по обеим сторонам основания, на этот раз константы о рекурсивной двоичной последовательности.
Худший: O (N²), все номера расположены на одной стороне основания, на этот раз последовательность является эквивалентом приблизительно делят вставки рода.
Средний балл: О (п * LOGN)
- Быстрый вид заливного отверстия
С нужное время после того, продвигаясь к середине встречается несколько меньше, чем база будет назначен слева (начало является расположение базы), право на сохранение первоначальной стоимости и т.д. оставлены для заполнения значений
Подсчет Сортировка
Элемент массива является ключевым, так как количество вхождений значения, осажденным во временный массив, и, наконец, пройти через временный массив для возврата к исходному массиву. Поскольку массивы являются стандартными строками, хранящиеся в JavaScript, поэтому устройство может быть использовано для подсчета негативного рода, но не выровнены знаков после запятой.
Предпочтительно: О (п + к), к представляет собой разность между максимальным и минимальным значениями.
Худшие: О (п + к)
Среднее: О (п + к)
function countingSort(nums) {
let arr = []
let max = Math.max(...nums)
let min = Math.min(...nums)
// 装桶
for (let i=0, len=nums.length; i<len; i++) {
let temp = nums[i]
arr[temp] = arr[temp] + 1 || 1
}
let index = 0
//还原数组
for (let i=min; i<=max; i++) {
while(arr[i]>0) {
nums[index++] = i
arr[i]--
}
}
return nums
}
Шелла
GAP некоторого приращения, вся последовательность делится на группы, и сравнения членов группы переключения со спины, а затем постепенно уменьшается до 1 приращения. Хилл сортировки аналогично для вставки последовательности, лишь несколько шагов, начиная с движения вперед в зазор.
Предпочтительно: О (п * LOGN), перейти к шагу два.
Худшие: O (N * LOGN)
Средний балл: O (N * LOGN)
function shellSort(nums) {
let len = nums.length
// 初始步数
let gap = parseInt(len / 2)
// 逐渐缩小步数
while (gap) {
// 从第gap个元素开始遍历
for (let i = gap; i < len; i++) {
//逐步和前面其他成员进行比较和交换
for (let j = i - gap; j >= 0; j -= gap) {
if (nums[j] > nums[j + gap]) {
[nums[j], nums[j + gap]] = [nums[j + gap], nums[j]]
} else {
break
}
}
}
gap = parseInt(gap / 2)
}
return nums
}
Оригинальная ссылка: https: //mp.weixin.qq.com/s/Rl_fcWzcSQ7NkPnozIrt0A