JavaScript数组排序(上)如何实现数组排序
提到数组排序就不得不提到排序算法,那么什么样的排序算法是好算法呢?提到算法就要讲到算法的时间和空间的复杂度
下面有一张时间复杂度的曲线图
一般来说应当将时间复杂度控制在O(nlogn)以下并且一般再n平方以上的时间复杂度是不能接受的
空间复杂度就是程序所需要临时占用存储空间大小的度量
下面我们就来讲述各种排序方式
排序算法有很多但是我们可以根据它们的特性大致分为种类型:
比较类排序:通过比较来决定元素之间的相对次序,其时间复杂度不能突破nlogn,因此也成为非线性时间比较类排序
非比较类排序 :不通过比较来决定元素之间的相对次序,它可以突破基于比较排序的时间下届以线性时间运行,因此也称为线性时间非比较类排序。
基于这两大类我们再细分一下:
这里我们主要讲解比较类排序,在排序中有一部分排序是稳定排序而另一部分是不稳定排序,例如快速排序就是不稳定的排序而冒泡排序就是稳定的排序
冒泡排序代码如下:
var a=[1,3,6,3, 23, 76,1,34, 222,6,456,221];
function bubbleSort(array){
const len = array.lengthif (len<2) return array
for (let i=0; i< len; i++){for (let j= o; j<i; j++){
if (array[jl> array[i]){
const temp = array[j]array[jl = array[i]array[i] = temp}
}
快速排序
示例代码如下:
var a=[1,3, 6,3,23,76,1,34, 222,6,456,221];
function quickSort(array){
var quick = function(arr) {if (arr.length <= 1) return arrconst len = arr.length
const index = Math.floor(len >> 1)const pivot = arr.splice(index, 1)[0]const left =门
const right=[]
for (let i=0; i<len; i++){if (arr[i> pivot){
right.push(arr[i])
} else if (arr[i]=pivot){
left.push(arr[i])}
}
return quick (left).concat([pivot], quick(right))}
const result = quick(array)return result
}
quickSort(a);//[1,1,3,3,6,6,23,34,,76,,221,222,456]
插入排序:
插入排序算法描述的是一种简单直观的排序算法它的工作原理是通过构建有序序列
对于未排序数据,在已排序序列中从后向前扫描找到相应位置并插入,从而达到排序的效果
var a=[1,3, 6,3, 23,76,1,34,222,6, 456,221];
function insertSort(array){
const len = array.lengthlet current
let prev
for (let i= 1; i<len; i++){current = array[i]
prev=i-1
while (prev >=O&& array[prev] >current){array[prev+1] = array prev]
prev--
}
array[prev+1]=current
return array
}
insertSort(a);//[1,1,3,3,6,6,23,34,76, 221, 222,456]
选择排序
一种简单直观的排序算法。这里就不列举了,后续讲算法章节的时候会详细讲述就不再JavaScript中将这些了。
下面简述一下几种排序。
上述文章如果有问题或者想问问题或者想交流技术或者想和作者闲聊可以+QQ:2029788643