注: 時間複雜度: 完成乙個程式所需要的時間;
一套圖 搞懂「時間複雜度」:o(1): 常量; o(logn): 對數; o(n):線性; o(n^2):指數型;
空間複雜度: 完成乙個程式所需要的記憶體/變數;
標準:陣列內部數字的公升序排列;
思想空間複雜度
迴圈比較o(n^2)
o(n^2)
氣泡排序:你比我小,我就要和你換,大值往上
選擇排序:你比我小,我就要和你換,小值往下
分而治之o(nlogn)
o(logn)
快速排序:取基值,左小右大,遞迴調,concat連
歸併排序:一直中分,用slice,合併比較終用shift
無序插有序o(n^2)
o(1)
插入排序:你比我大,你就後移,找到最後乙個大值,插入
二分法排序:找到第乙個大值,大值自身及後面都後移,插入
arr.sort((a,b)=>a-b)
1.氣泡排序: 兩兩比較,如果前乙個比後乙個大,則互換位置,每次迴圈比較後,最後乙個永遠是最大的,下一輪比較,它就不參與了。
口訣:一層減1,二層減i減1
時間複雜度:(n-1)*(n-i-1)=n^2
function sort(array)
}
}return array;
}
一共比較了 1 + 2 + 3 + ... + (array.length-1) 次比較。
2. 快速排序:取基準,左小右大,做遞迴;兩個坑兒要記牢,長度小(於)1要返回,splice擷取後要取[0]; (20210627總結)
arr.splice(index,num,items); 返回被擷取的陣列
math.floor(num); 對浮點數向下取整。
時間複雜度:o(nlogn)
function quicksort(array)
//var middleindex = math.floor(array.length / 2);
//var middle = array.splice(middleindex,1)[0]; //獲得中間數值
// 20210615 新寫法
var middle = array.splice(0,1)[0];// 直接擷取第乙個得了,並且用splice函式截取出原陣列,簡單直接,因為怎麼都是順序一遍
var left = ;
var right = ;
for(var i = 0; i < array.length; i++)eles
}return quicksort(left).concat([middle],quicksort(right)); //進行遞迴呼叫
}
3. 插入排序: 設定有序數列和無序數列,把無序數列中的項插入到有序數列中,在有序數列的內迴圈中採取移動賦值的方式達到目的。
適合小資料量排序(<1000)
時間複雜度:o(n^2)
空間複雜度:o(1)
// 插入排序,無序數列依次插入有序數列
function insertsort(array = )
// 找到自己位置了,我就插入
array[j+1] = temp;
} return array;
}
4. 二分法排序:在插入排序的基礎上進行的優化,在已排序數列中,找到第乙個比待插入項大的值
// 二分演算法:在插入排序的基礎上進行的優化,在已排序數列中,找到第乙個比待插入項大的值
function binaryinsertsort(arr = )else
}// 2. 整體後移,從當前項的前一項開始,依次後移
for(let j = i - 1;j >= left;j--)
// 3. 找到位置,插入
arr[left] = temp;
} return arr;
}
5. 選擇排序: 把未排序列表中最小(大)的數,排在首位,再把剩餘未排序列表中最小(大)的數,排在排序列表的後面,依據索引來排序。
前面的是最小的,和氣泡排序的邏輯是相反的,是把未排序中最小的往前移。
// 選擇排序:把未排序中的最小值往前移
function selectionsort(arr = )
}// 3. 最終找到了未排序中的最小值的索引,那就替換吧
arr[i] = arr[minindex];
arr[minindex] = temp;
} return arr;
}
6. 歸併排序:分而治之的思想;
先分解,分到不能再分,return遞迴合併;後合併,合到其一為空,起變數,用shift,concat連。
時間複雜度:o(nlogn)
和快速排序很像
// 歸併排序:分而治之的思想
function mergesort(arr = ) // 分到不能再分為止
let mid = math.floor(arr.length/2);
let left = arr.slice(0,mid);
let right = arr.slice(mid);
return merge(sort(left),sort(right));
} // 2. 再合併
function merge(left = ,right = )else
}return temp.concat(left,right);
} return sort(arr);
}
7. 排序:
無法保證時間和空間複雜度(取決於具體表現)
arr.sort((a,b)=> a-b ); //公升序排列;b-a// 降序排列;
口訣:順昇,逆降,改變原陣列;
sort的用法: 原理,原地排序
8. 希爾排序[todo]
js 實現排序演算法 -- 希爾排序(shell sort)
十大經典排序演算法(**演示)
js實現插入排序
歸併排序演算法及其js實現 :分而治之思想,歸併思想
知識體系第二遍回顧 補充 原型鏈
20210616晚 總結性描述 任何乙個物件都有乙個 proto 屬性,指向建構函式的原型prototype,而prototype也是乙個物件,也有乙個 proto 屬性,這樣一環接一環,就形成了乙個鏈,到最後object.prototype截止。person.prototype.construct...
第二遍回顧 前端flex布局
1.flex 彎曲,收縮 2.概念 2條主軸,main axis,cross axis 每個單元為flex item,主軸空間main size,交叉軸空間cross size 3.容器 container display flex inline flex 塊狀元素用flex 行內元素用inline...
Python學習 第二遍
computer原指專門負責計算的人,後來演變成特指計算編譯,譯為計算機 計算機是能根據一組指令運算元據的機器。五大部件對應硬體 擴充套件 計算機的工作原理a b 程式語言的種類 常用的程式語言 anaconda工具的使用問題 如何利用python程式進行攝氏度和華氏度的轉換 步驟一 分析問題的計算...