本文介绍常用的四种排序方式:冒泡排序、快速排序、插入排序、选择排序
冒泡排序
// 冒泡--时间复杂度为O(n)--算法平均复杂度:n(n^2)
let ceshiArr = [6,4,3,5,1,2]
function popSort(array) {
for (let i = 0; i < array.length; i++) {
// 因为之后每一次冒泡的两两比较次数会越来越少,所以 -i
for (let j = 0; j < array.length - 1 - i; j++) {
if (array[j+1] < array[j]) {
var temp = array[j]
array[j] = array[j+1]
array[j+1] = temp
}
}
}
return array
}
console.log(popSort(ceshiArr));
2、快速排序
// 快速排序--中间值---算法平均复杂度:n(n log n)
let ceshiArr = [6,4,3,5,1,2]
function quickSort(array) {
if (array.length <= 1) {
return array
}
let leftArr = []
let rightArr = []
let mid = Math.floor(array.length / 2)
let midValue = array.splice(mid,1)[0]
for (let i = 0; i < array.length; i++) {
if (array[i] > midValue) {
rightArr.push(array[i])
} else {
leftArr.push(array[i])
}
}
return quickSort(leftArr).concat([midValue],quickSort(rightArr))
}
console.log(quickSort(ceshiArr));
3、插入排序
// 插入排序---算法平均复杂度:n(n^2)
let ceshiArr = [6,4,3,5,1,2]
function insertSort(array) {
for (let i = 1; i < array.length; i++) {
let minValue = array[i]
let j = i - 1
while (array[j] > minValue) {
array[j+1] = array[j]
j--
}
array[j+1] = minValue
}
return array
}
console.log(insertSort(ceshiArr));
4、选择排序
// 选择排序---算法平均复杂度:n(n^2)
let ceshiArr = [6,4,3,5,1,2]
function selectSort(array) {
let minIndex
let temp
for (let i = 0; i < array.length; i++) {
let minIndex = i
for (let j = i+1; j < array.length; j++) {
if (array[j] < array[minIndex]) {
minIndex = j
}
}
temp = array[i]
array[i] = array[minIndex]
array[minIndex] = temp
}
return array
}
console.log(selectSort(ceshiArr));