知識體系第二遍回顧補充 冒泡演算法

2022-02-15 17:58:39 字數 3315 閱讀 6655

注: 時間複雜度: 完成乙個程式所需要的時間;

一套圖 搞懂「時間複雜度」: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程式進行攝氏度和華氏度的轉換 步驟一 分析問題的計算...