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