本篇博客中的代碼實現(xiàn)依然采用Swift3.0來實現(xiàn)。在前幾篇博客連續(xù)的介紹了關(guān)于查找的相關(guān)內(nèi)容, 大約包括線性數(shù)據(jù)結(jié)構(gòu)的順序查找、折半查找、插值查找、Fibonacci查找,還包括數(shù)結(jié)構(gòu)的二叉排序樹以及平衡二叉樹的構(gòu)建與查找,然后還聊了哈希表的構(gòu)建與查找。接下來的幾篇博客中我們就集中的聊一下常見的集中排序方式,并并給出相應(yīng)的時間復(fù)雜度。本篇博客我們將會詳細(xì)的介紹冒泡排序、插入排序、希爾排序以及選擇排序,下篇博客將繼續(xù)介紹堆排序、歸并排序以及快速排序的相關(guān)內(nèi)容。當(dāng)然上述內(nèi)容的代碼實現(xiàn)我們依然采用Swift面向?qū)ο笳Z言來實現(xiàn)。
本篇博客的思路與以往博客的思路一直,先分析每種排序的規(guī)則,然后給出原理示意圖,最后根據(jù)示意圖給出相應(yīng)的代碼實現(xiàn)。編程這東西,只要是思路清晰,給出相應(yīng)的代碼實現(xiàn)并不困難,本篇是使用Swift語言來實現(xiàn)的,如果你對Swift語言不熟悉,你可以選擇其他你熟悉的語言來實現(xiàn)。雖然語言不同,但是思路和方法都是一樣的。廢話少說,開始今天博客的主題。
一、排序協(xié)議的定義
在博客的開頭的,我們先給出排序協(xié)議的定義。因為我們本篇博客含有多種排序方式,為了使每種排序方法對外調(diào)用方式一致,我們需要定義一個排序的相關(guān)協(xié)議。所有排序的相關(guān)類都必須遵循該協(xié)議,讓此協(xié)議來定義具體的排序類對外的調(diào)用方式。