iOS演算法總結 回顧

2021-08-10 00:26:32 字數 1287 閱讀 4835

根據將排序記錄是否全部放置在記憶體中,將排序分為內排序和外排序,之前講的都是內排序,這裡總結一下,內排序分為四類:插入排序、交換排序、選擇排序和歸併排序。前幾篇介紹的7種演算法分別是各種分類的代表演算法:

目前還沒有十全十美的排序演算法,即使是快速排序法,也只是在整體效能上優越,它也存在排序不穩定、需要大量輔助空間、對少量資料排序無優勢等不足。這裡我們就來從多個角度來剖析一下提到的各種排序的長與短。

我們將7種演算法的各種指標進行對比:

從演算法的簡單性來看,分為兩類:

平均情況:顯然最後3種改進演算法要勝過希爾排序,並遠遠勝超過前3種簡單演算法,所以堆、歸併、快速演算法要好一點。

最好情況:冒泡和插入排序要更勝一籌,如果你的待排序序列總是基本有序,你就考慮這兩種演算法。

最壞情況:堆排序和歸併排序又強於快速排序以及其他簡單排序。

空間複雜度:歸併排序和快速排序就比較消耗記憶體。所以不要選擇歸併排序和快速排序。

穩定性: 歸併排序獨占鰲頭。

待排序記錄的個數:待排序的個數n越少,採用簡單排序方法越合適,反之,n越大,採用改進排序方法越合適。至於n多少比較合適,目前還沒有定義。

從表中看,似乎選擇排序在3種簡單排序中效能最差,其實也不完全是,比如,如果比較的關鍵字資訊量比大,比較次數比較多,這樣移動記錄所花費的時間也就越多,我們給出3種簡單排序演算法的移動次數比較:

你會發現選擇排序就非常有優勢,原因在於它是通過大量比較後選擇明確記錄進行移動,有的放矢。因此對於數量不是很大而比較需求比較大的時候,選擇排序演算法是佔優的。另外,記錄的關鍵資訊量大小對那四個改進演算法影響不大。

總之,從指標來看,快速排序是效能最好的排序演算法,如果求穩定的話,建議選擇歸併排序

iOS 演算法總結

1.不用中間變數,用兩種方法交換a 和 b的值 func arithmetic1 func swap11 a inout int,b inout int func swap22 a inout int,b inout int func swap33 a inout int,b inout int 2...

iOS 排序演算法總結

查考 二叉樹借鑑上面乙個位址,把常用的一些排序演算法總結歸納一下,便於大家和自己的學習 一 插入排序 1 直接插入排序 直接插入排序基本思想 1 基本思想 假設待排序的記錄存放在陣列r 1.n 中。初始時,r 1 自成1個有序區,無序區為r 2.n 從i 2起直至i n為止,依次將r i 插入當前的...

iOS學習過程回顧

從2013年12月入坑至今,差不多做了一年半ios開發,回顧一下學習的過程 首先我覺得,學習一門語言,需要5個步驟 1 了解語言本身。比如首先需要了解objective c的特性,以及各種相關的東西。從基礎的變數型別 語法,到語言的高階特性如block 反射等等 3 熟悉平台的各種常用不常用api。...