快速排序演算法 鍊錶資料結構 工廠設計模式

2021-09-19 13:44:49 字數 2358 閱讀 6186

首先它是一種排序演算法,排序演算法是為了讓無序的資料組合變成有序的資料組合。

有序的資料組合最大的優勢是在於當你進行資料定位和採用時,

會非常方便,因為這個資料是有序的

從而在**設計的時候會讓你避免很多不必要的麻煩,

因為無序資料在進行推斷資料前後關係的時候會顯示很繁瑣.

單鏈表

這是鍊錶中結構最簡單的,乙個單鏈表的節點(node)分為兩部分,第乙個部分儲存或者顯示節點的資訊,另乙個部分儲存的是下乙個節點的位址,最後乙個節點儲存的位址的部分指向的是空值。

單鏈表只可向乙個方向遍歷,一般查詢乙個節點的時候需要從第乙個節點開始訪問,一直訪問到需要的位置。而插入乙個節點,對於單鏈表,我們只提供在煉表頭插入,只需要將當前插入的節點設定為頭結點,next節點指向原頭節點即可,刪除乙個節點,我們將該節點的前乙個節點的next指向該節點的下乙個節點**。

雙端鍊錶**

對於單向鍊錶,如果想在尾部新增乙個節點,那麼必須從頭部一直遍歷到尾部,找到尾部的節點,然後在尾節點後面插入乙個節點,但是這樣的操作很麻煩,但是如果我們在設計鍊錶的時候加上乙個對尾節點的引用,那麼會簡單的很多。

有序鍊錶**

前面的鍊錶實現插入都是無序的,在有些應用中需要鍊錶中的資料有序,這稱之為有序鍊錶。在有序鍊錶中,資料是按照關鍵值有序排列的。一般在大多數需要使用有序陣列的場合也可以使用有序鍊錶。有序鍊錶優於有序陣列的地方是插入的速度(因為元素不需要移動),另外鍊錶可以擴充套件到全部有效的使用記憶體,而陣列只能侷限於乙個固定的大小中。

工廠方法模式分為三種:

1、普通工廠模式,就是建立乙個工廠類,對實現了同一介面的一些類進行例項的建立。首先看下關係圖:

舉例如下:(我們舉乙個傳送郵件和簡訊的例子)

首先,建立二者的共同介面:

public inte***ce sender

其次,建立實現類:

public class mailsender implements sender

}public class smssender implements sender 最後,建工廠類:

public class sendfactory else if ("sms".equals(type)) else

}我們來測試下:

public class factorytest }

輸出:this is sms sender!

2、多個工廠方法模式,是對普通工廠方法模式的改進,在普通工廠方法模式中,如果傳遞的字串出錯,則不能正確建立物件,而多個工廠方法模式是提供多個工廠方法,分別建立物件。關係圖:

將上面的**做下修改,改動下sendfactory類就行,如下:

public class sendfactory

public sender producesms()
測試類如下:

public class factorytest 輸出:this is mailsender!

3、靜態工廠方法模式,將上面的多個工廠方法模式裡的方法置為靜態的,不需要建立例項,直接呼叫即可。

public class sendfactory

public static sender producesms()public class factorytest 輸出:this is mailsender!

總體來說,工廠模式適合:凡是出現了大量的產品需要建立,並且具有共同的介面時,可以通過工廠方法模式進行建立。在以上的三種模式中,第一種如果傳入的字串有誤,不能正確建立物件,第三種相對於第二種,不需要例項化工廠類,所以,大多數情況下,我們會選用第三種——靜態工廠方法模式。

4、抽象工廠模式(abstract factory)

工廠方法模式有乙個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式,必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,如何解決?就用到抽象工廠模式,建立多個工廠類,這樣一旦需要增加新的功能,直接增加新的工廠類就可以了,不需要修改之前的**。因為抽象工廠不太好理解,我們先看看圖,然後就和**,就比較容易理解。

請看例子:

public inte***ce sender

兩個實現類:

public class mailsender implements sender

}public class smssender implements sender 兩個工廠類:

public class sendmailfactory implements provider public class sendsmsfactory implements provider在提供乙個介面:

public inte***ce provider

測試類:

public class test 原文:

資料結構 排序演算法 快速排序

演算法描述 快速排序是由東尼 霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要 n log n 次比較。在最壞狀況下則需要 n2 次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他 n log n 演算法更快,因為它的內部迴圈 inner loop 可以在大部分的架構上很有效率地...

資料結構 鍊錶排序

問題 我們需要將乙個無序的單鏈表在 o n log n 時間複雜度和常數級空間複雜度下,對鍊錶進行排序 時間複雜度為穩定o n log n 的排序只有堆排序與歸併排序,但是堆排序需要建堆,那麼鍊錶有n個節點我們就需要開闢長度為n的陣列來存放節點,所以我們選擇歸併排序,我們知道普通的歸併排序需要開闢乙...

資料結構 快速排序演算法

一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候 i 0,j n 1 2 以第乙個陣列元素作為關鍵資料,賦值給key,即key a 0 3 從j開始向前搜尋,即由後開始向前搜尋 j 找到第乙個小於key的值a j 將a j 和a i 互換 4 從i開始向後搜尋,即由前開始向後搜尋 i ...