在上一篇博文中我們提到:要令排序算法的時間復雜度低於O(n2),必須令算法執行“遠距離的元素交換”,使得平均每次交換減少不止1逆序數。 而希爾排序就是“簡單地”將這個道理應用到了插入排序中, ...
在前兩次博文中,我們由線性表講到數組,然后又由數組的缺陷提出了指針式鏈表。但是指針式鏈表也不是完美無缺的,在某些沒有指針數據類型的編程語言中,指針式鏈表是無法由我們來實現的,但是有時候我們又希望能用上鏈表,因為鏈表可以快速的進行插入和刪除。這個時候我們就可以使用一種由數組來實現的 鏈表 游標數組。其優點是可以快速的插入和刪除 由於不需要指針式鏈表的malloc和free等內存操作,所以使用時游標 ...
2017-04-02 00:49 0 1844 推薦指數:
在上一篇博文中我們提到:要令排序算法的時間復雜度低於O(n2),必須令算法執行“遠距離的元素交換”,使得平均每次交換減少不止1逆序數。 而希爾排序就是“簡單地”將這個道理應用到了插入排序中, ...
正如上一篇博文所說,今天我們來討論一下所謂的“高級排序”——快速排序。首先聲明,快速排序是一個典型而又“簡單”的分治的遞歸算法。 遞歸的威力我們在介紹插入排序時相比已經見識過了:只要我前面的隊伍是有序的,我就可以通過向前插隊來完成“我的排序”,至於前面的隊伍怎么有序……遞歸實現 ...
到目前為止,我們一直在談論的數據結構都是“線性結構”,不論是普通鏈表、棧還是隊列,其中的每個元素(除了第一個和最后一個)都只有一個前驅(排在前面的元素)和一個后繼(排在后面的元素),但是在(9)中,我們發現有的時候“線性結構”是不能滿足我們的需求的,必然存在某些場景需要我們使用非線性的數據結構 ...
在深入淺出數據結構系列前面的文章中,我們一直在討論“線性表”,其形式如下: 由a1,a2,a3,……a(n-1)個元素組成的序列,其中每一個元素ai(0<i<n)都是一個“原子”,“原子”的意思就是說元素本身是一個個體,所有元素都是相同的結構。 但是在我們常見 ...
上一篇博文我們提到了圖的最短路徑問題:兩個頂點間的最短路徑該如何尋找?其實這個問題不應該叫“最短”路徑問題,而應該叫“最便宜”路徑問題,因為有時候我們會為圖中的邊賦權(weight),也叫權重,相 ...
到目前為止,我們所提過的所有數據結構,不是線性表,就是樹。即使是散列表、優先隊列、AVL樹這樣看似特殊的數據結構,其實也沒逃出線性表與樹的范疇,那么,在數據結構方面(如果是說算法方面,那么與線性表、樹相關的算法可講不完),還有什么我們尚未探討的情況嗎? 答案是肯定的,那就是:圖 ...
在普通隊列中,元素出隊的順序是由元素入隊時間決定的,也就是誰先入隊,誰先出隊。但是有時候我們希望有這樣的一個隊列:誰先入隊不重要,重要的是誰的“優先級高”,優先級越高越先出隊。這樣的數據結構我們稱之為優先隊列(priority queue),其常用於一些特殊應用,比如操作系統控制進程的調度程序 ...
所謂算法的“時間復雜度”,你可以將其理解為算法“要花費的時間量”。比如說,讓你用抹布將家里完完全全打掃一遍(看成算法吧……)大概要5個小時,那么你用抹布打掃家里的“時間復雜度”就是5個小 ...