雜湊表底層採用陣列+鍊錶結合的方式實現,對於每乙個key值,內部採用任意雜湊演算法根據key值計算出乙個整數,然後對陣列的長度求餘,求餘後的結果即為內部陣列中的index值。
如果某兩個key對應的雜湊值對陣列求餘得到的結果相同,或者兩個key對應的雜湊值也是相同的,則發生雜湊衝突,雜湊表會在某個index對應的結構體中使用鍊錶來儲存所有index相同的資料,俗稱拉鍊法。
鍊錶長度過長時,內部會將鍊錶轉化為紅黑樹結構,或者擴充來減少雜湊衝突。
list被稱為動態陣列,其內部就是乙個陣列實現的。這個陣列的長度要比實際資料的長度大,如果容納不下時就會發生擴容。每次新增/刪除資料都會導致陣列索引需要重新排序,所以list的優缺點和陣列基本相同,查詢效率很高,新增/刪除資料效率低。
linkedlist則相反,底層由雙向鍊錶實現,隨機訪問效率低,新增/刪除效率高。
sort()函式採用了內省排序(introsort)。該排序是一種混合排序,當排序元素小於等於16時採用插入排序(insertion sort),接下來會嘗試使用快速排序(quicksort),如果分割槽數超過2*logn,其中n是輸入陣列的範圍,則使用堆排序演算法(heapsort),否則使用快速排序。
分割槽數是快速排序時遞迴產生的區間;
輸入陣列的範圍的意義目前還不確定;
官方文件
關於自省排序,這裡有篇更詳細的文章。自省排序介紹
table使用的是快速排序。
資料結構 面試題
python實現 寫個大概,import re def quick sort alist,first,last if first last return mid value alist first low first high last while low high while low mid va...
資料結構 面試題
2.棧2.2使用棧計算字尾表示式 2.3對棧的元素進行排序 2.4判斷表示式是否括號平衡 3.佇列 4.鍊錶 5.樹6.圖 7.字典樹 這是一種高效的樹形結構,但值得單獨說明 8.雜湊表 雜湊表 1.1 尋找陣列中第二小的元素 思路 公升序排序之後,輸出第二個數字 1.2 找到陣列中第乙個不重複出現...
mysql資料結構面試題 MySQL 面試題
mysql 的一些面試題,有的是平時聊到的,有的是聽別人說的,有的是工作中遇到的,特此彙總一下,有問有答。一條 sql 查詢語句執行流程?1 聯結器。客戶端和伺服器 tcp 握手後,驗證使用者名稱密碼。使用者名稱密碼通過後,聯結器會到許可權表中查詢你擁有的許可權。之後這個連線裡面的許可權判斷邏輯,都...