function bubbleSort(nums) {
const len = nums.length
let i = len - 1
while (i > 0) {
let pos = 0
for (let j = 0; j < i; j++) {
if (nums[j] > nums[j + 1]) {
pos = j // 记录交换時的位置
;[nums[j], nums[j + 1]] = [nums[j + 1], nums[j]] // 交换位置
}
}
i = pos
}
return nums
}
function bubbleSort(nums) {
let low = 0
let high = nums.length - 1
let i
while (low < high) {
// 正向排序,找出最大值
for (i = low; i < high; ++i) {
if (nums[i] > nums[i + 1]) {
;[nums[i], nums[i + 1]] = [nums[i + 1], nums[i]] // 交换位置
}
}
--high // 前移一位
// 反向排序,找出最小值
for (i = high; i > low; --i) {
if (nums[i] < nums[i - 1]) {
;[nums[i], nums[i - 1]] = [nums[i - 1], nums[i]] // 交换位置
}
}
++low // 后移一位
}
return nums
}
function selectionSort(nums) {
const len = nums.length
let min = 0
for (let i = 0; i < len - 1; i++) {
min = i
for (let j = i + 1; j < len; j++) {
if (nums[min] > nums[j]) {
min = j // 保存最小值的索引
}
}
;[nums[i], nums[min]] = [nums[min], nums[i]] // 交换位置
}
return nums
}
function insertionSort(nums) {
const len = nums.length
for (let i = 1; i < len; i++) {
let k = nums[i]
let j = i - 1
while (j >= 0 && nums[j].num > k.num) {
nums[j + 1] = num[j]
j--
}
nums[j + 1] = k
}
return nums
}
function insertionSort(nums) {
const len = nums.length
for (let i = 1; i < len; i++) {
let k = nums[i]
let left = 0
let right = i - 1
while (left <= right) {
let middle = ~~((left + right) / 2)
if (k < nums[middle]) {
right = middle - 1
} else {
left = middle + 1
}
}
for (let j = i - 1; j >= left; j--) {
nums[j + 1] = nums[j]
}
nums[left] = k
}
return nums
}
function mergeSort(nums) {
const len = nums.length
if (len <= 1) return nums
let middle = ~~(len / 2)
let left = nums.slice(0, middle)
let right = nums.slice(middle)
return merge(mergeSort(left), mergeSort(right))
}
function merge(left, right) {
const result = []
while (left.length && right.length) {
if (left[0] < right[0]) {
result.push(left.shift())
} else {
result.push(right.shift())
}
}
return result.concat(left, right)
}