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)
异或运算
| 性质 | 值 |
|