复杂度分析

冒泡排序
function bubble(arr){
for(let i = 0; i < arr.length - 1; i++){
for(let j = 0; j < arr.length - 1 - i; j++){
if(arr[j] > arr[j+1]){
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]
}
}
}
return arr
}
选择排序
function selectionSort(arr){
for(let i = 0; i < arr.length - 1; i++){
for(let j = i + 1; j < arr.length; j++){
if(arr[i] > arr[j]){
[arr[i],arr[j]] = [arr[j],arr[i]]
}
}
}
return arr
}
插入排序
function insertionSort(arr){
for(let i = 1; i < arr.length; i++){
let temp = arr[i]
let j = i - 1
while(j >= 0 && temp < arr[j]){
arr[j+1] = arr[j]
j--
}
arr[j+1] = temp
}
return arr
}
快速排序
function quickSort(nums){
function partition(arr,left,right){
let temp = arr[left]
while(left < right){
while(left < right && arr[right] >= temp) right--;
arr[left] = arr[right]
while(left < right && arr[left] < temp) left++;
arr[right] = arr[left]
}
arr[left] = temp
return left
}
function recursive(arr,left,right){
if(left >= right) return arr;
let index = partition(arr,left,right)
recursive(arr,left,index - 1)
recursive(arr,index + 1,right)
}
recursive(nums,0,nums.length-1)
}
let arr1 = [3,3,8,3,5,-3]
console.log(arr1)
quickSort(arr1)
console.log(arr1)
归并排序
function mergeSort(nums){
function merge(l1,r1,l2,r2){
let arr = []
let index = 0
let i = l1
let j = l2
while(i <= r1 && j <= r2){
arr[index++] = nums[i] > nums[j] ? nums[j++] : nums[i++]
}
while(i <= r1) arr[index++] = nums[i++];
while(j <= r2) arr[index++] = nums[j++];
for(let t = 0; t < index; t++){
nums[l1+t] = arr[t]
}
}
function recursive(left,right){
if(left >= right) return
let mid = Math.floor((left+right) / 2)
recursive(left,mid)
recursive(mid+1,right)
merge(left,mid,mid+1,right)
return nums
}
recursive(0,nums.length-1)
}