1、平常测试发现
for 循环的时间复杂度比 indexOf的时间复杂度要少得多
递归的时间复杂度要比while的时间复杂度少
2、排序算法
详情
稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
时间复杂度:对排序数据的总的操作次数。反映当n变化时,操作次数呈现什么规律。
空间复杂度:是指算法在计算机内执行时所需存储空间的度量,它也是数据规模n的函数。
2.1、冒泡排序
时间复杂度O(n2),时间复杂度最好是O(n),最差是O(n2),空间负责度为O(1)
算法逻辑:相邻两个数进比较,前面的比后面的大,那么他们交换,
第一个for 一次只比较一组数据,比一个值往后排
function bubbleSort (arr) {
let len = arr.length
let temp
for (let i = 0; i < len - 1; i++) {
for (let j = 0; j < len - 1- i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j + 1]
arr[j + 1] = arr[j]
arr[j] = temp
}
}
}
return arr
}
2.2、选择排序
时间复杂度O(n2),空间负责度为O(1),时间复杂度固定O(n2)
算法逻辑:把第一个数取作标记为最小的数据,然后用它与剩下的比较,如果比它了,那么把比它小的取作标记,继续往下比较,一轮比较完,把它放在前面。以此类推,直到所有元素均排序完毕。
function selectionSort (arr) {
let len = arr.length
let minIndex = 0
let temp
for (let i = 0; i < len - 1; i++) {
minIndex = i
for (let j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j
}
}
temp = arr[i]
arr[i] = arr[minIndex]
arr[minIndex] = temp
}
return arr
}
2.3、插入排序
时间复杂度O(n2),时间复杂度最好是O(n),最差是O(n2),空间负责度为O(1)
算法逻辑:从未排序的拿一个和前面已排序的数据进行对比排序,查找响应的位置
function insertionSort (arr) {
let len = arr.length
var preIndex, current;
for (var i = 1; i < len; i++) {
current = arr[i]
// 第几轮就循环几次
preIndex = i - 1
while (preIndex >= 0 && arr[preIndex] > current) {
arr[preIndex + 1] = arr[preIndex]
preIndex--
}
arr[preIndex + 1] = current;
}
return arr
}