1.认识复杂度和简单排序

常数

常数操作​​+ - * / >> <<​​ 数组的寻址:​​int a = arr[i]​​ 都属于常数

非常数操作:链表的寻址:​​int b = list.get(i)​

时间复杂度

选择排序: 从0的位置循环对比 将最小的放到0的位置, 然后从1的位置循环对比 将最小的放到1的位置,... 一直到第N项

function selectSort (arr){
for(let i = 0; i < arr.length; i++){
let mianIndex = i;
for(let j = i + 1; j< arr.length; j++){
mianIndex = arr[mianIndex] < arr[j]? mianIndex : j;
}
swap(arr,i,mianIndex);
}
return arr;
}
function swap (arr,i, j){
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp
}


时间复杂度O(N^2)

首先估计 需要进行的常数操作

写出常数操作的公式

 看: N-1 + N-2 + N-3 ...
比较:N-1 + N-2 + N-3 ...
交换:N
= aN^2 + bN + c


取最复杂的情况就是​​aN^2​​,去掉常数系数​​a​​, 使用​​O()​​包上就是时间复杂度 ​​O(N^2)​

​O(N)​​优与​​O(N^2)​

分析一个算法的好坏、先对比时间复杂度指标、指标相同的情况对比实际运行时间(常数操作时间)

分类:

O():代表最差情况的常数操作

θ():代表平均情况

Ω():代表最好情况

冒泡排序:

从0的位置对比1的位置,如果0的位置>1的位置,两个数做交换、继续从1的位置对比2的位置,...一直到第N -1项

function bubbleSort (arr){
for(let e = arr.length - 1; e > 0; e--){
for(let i = 0; i < e; i++){
if(arr[i] > arr[i + 1]){
swap(arr,i,i + 1)
}
}
}
return arr;
}
function swap (arr,i, j){
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp
}


时间复杂度O(N^2)

异或运算

| 性质 | 值 |

|