复杂度:O(n^2)
- 冒泡排序
function sort(nums: number[]): number[] {
for (let i = 0
for (let j = i + 1
if (nums[i] > nums[j]) {
const temp = nums[i]
nums[i] = nums[j]
nums[j] = temp
}
}
}
return nums
}
复杂度:O(nlogn)
- 归并排序
function mergeSort(nums: number[]): number[] {
const len = nums.length
if (len === 1) return nums
const middle = Math.floor(len / 2)
const left = nums.slice(0, middle)
const right = nums.slice(middle)
// 递归二分数组,然后对每个子序列排序
return merge(mergeSort(left), mergeSort(right))
}
// 排序并合并左右两子序列,返回一个新的排序好的序列
function merge(left: number[], right: number[]): number[] {
let result = []
while (left.length && right.length) {
if (left[0] <= right[0]) {
result.push(left.shift())
} else {
result.push(right.shift())
}
}
if (!left.length) result = result.concat(right)
if (!right.length) result = result.concat(left)
return result as number[]
}