18
22
112
57013
116
42
散列表 散列表用的是數組支持按照下標隨機訪問的特性,所以散列表其實就是數組的一種擴展,由數組演化而來。可以說,沒有數組,就沒有散列表。
跳表 因為二分查找底層依賴的是數組隨機訪問的特性,所以只能用數組來實現。如果數據存儲在鏈表中,就真的沒法用二分查找算法了嗎?只需要對鏈表稍加改造,就可以支持類似”二分“的查找...
查找第一個大于等于給定值的元素 在有序數組中,查找第一個大于等于給定值的元素。比如,數組中存儲的這樣一個序列:3,4,6,7,10。如果查找第一個大于等于5的元素,那就是6。...
查找第一個值等于給定值得元素 有序數據集合中存在重復的數據,希望找到第一個值等于給定值的數據。比如下面這樣一個有序數組,其中,a[5]、a[6]、a[7]的值都等于8,是重復...
二分查找 假設有1000條訂單數據,已經按照訂單金額從小到大排序,每個訂單金額都不同,并且最小單位是元。現在想知道是否存在金額等于19元的訂單。如果存在,則返回訂單數據,如果...
基數排序 假設有10萬個手機號碼,希望將這10萬個手機號從小到大排序,有什么比較快速地排序方法呢?快排時間復雜度可以做到O(nlogn),還有更高效的排序算法嗎?桶排序、計數...
計數排序 計數排序其實是桶排序的一種特殊情況。當要排序的n個數據,所處的范圍并不大的時候,比如最大值是K,就可以把數據劃分成K個桶。每個桶內的數據值都是相同的,省掉了桶內排序...
桶排序(Bucket Sort) 桶排序核心思想是將要排序的數據分到幾個有序的桶里,每個桶里的數據在單獨進行排序。桶內排完序之后,再把每個桶里的數據按照順序依次取出,組成的序...
快速排序 快速排序的思想是這樣的:如果要排序數組中下標從p到r之間的一組數據,選擇p到r之間的任意一個數據作為pivot(分區點)。遍歷p到r之間的數據,將小于pivot的放...
歸并排序 歸并排序的核心思想還是蠻簡單的。如果要排序一個數組,先把數組從中間分成前后兩部分,然后對前后兩部分分別排序,再將排好序的兩部分合并在一起,這樣整個數組就有序了。 歸...
選擇排序 選擇排序算法的實現思路有點類似插入排序,也分已排序區間和未排序區間。但是選擇排序每次會從未排序區間中找到最小的元素,將其放到已排序區間的末尾。 代碼實現如下: 首先...
插入排序 一個有序的數組,往里面添加一個新的數據后,如何繼續保持數據有序呢?很簡單,只要遍歷數組,找到數據應該插入的位置將其插入即可。 這是一個動態排序的過程,即動態地往有序...
冒泡排序 冒泡排序只會操作相鄰的兩個數據。每次冒泡操作都會對相鄰的兩個元素進行比較,看是否滿足大小關系要求。如果不滿足就讓它倆互換。一次冒泡會讓至少一個元素移動它應該在的位置...
排序算法的執行效率 1.最好情況、最壞情況、平均情況時間復雜度 在分析排序算法的時間復雜度時,要分別給出最好情況、最壞情況、平均情況下的時間復雜度。除此之外,還要說出最好、最...
如何理解”隊列“ 隊列這個概念非常好理解。可以把它想象成排隊買票,先來的先買,后來的人只能站末尾,不允許插隊。先進者先出,這就是典型的“隊列”。棧只支持兩個基本操作:入棧pu...
如何理解”棧“ 關于”棧“有一個非常貼切的例子,就是一摞疊在一起的盤子。平時放盤子的時候,都是從下往上一個一個放;取的時候,是從上往下一個一個地依次取,不能從中間任意抽出。后...
單鏈表反轉 鏈表中環的檢測 兩個有序鏈表的合并
鏈表 相比數組,鏈表是一種稍微復雜一點的數據結構。這兩個非常基礎、非常常用的數據結構,常常會放到一塊兒來比較。所以先來看,這兩者有什么區別。先從底層的存儲結構上來看一看。從圖...
在每一種編程語言中,基本都會有數組這種數據類型。不過,它不僅僅是一種編程語言中的數據類型,還是一種最基礎的數據結構。盡管數組看起來非常基礎、簡單,但是很多人并沒有理解這個基礎...
中介模式 中介模式的英文是Mediator Design Pattern。中介模式定義了一個單獨的(中介)對象,來封裝一組對象之間的交互。將這組對象之間的交互委派給與中介對象...