Android探索與鞏固(快速排序演算法)

2021-09-11 06:04:37 字數 1520 閱讀 7204

​ 年後放假回來得了假期症候群,懶勁上來了,之前一直想更新的部落格一拖再拖,再拖下去自己都不好意思了。

前幾天看了看各個大廠的安卓面試題,發現大廠的安卓面試都會在最後考一道快速排序演算法,演算法對於我現在來說不太熟練,就跟著網上的敲了一下,就在這裡做下總結。

​ 網路上有總結快速排序演算法的複雜度為nlogn。這裡的nlogn表示為演算法的時空複雜度。標準寫法為o(n*logn)。時間複雜度為o(n),代表的是資料量增大多少倍,耗時就增大多少倍。而o(logn

)代表的是當資料增大n倍時,耗時增大logn倍(這裡是

log ⁡2

n\log_2 n

log2​n

)而o(nlogn)就是當資料增大n倍時,耗時增大nlogn倍,當資料增大256倍時,耗時增大256*8倍。

原理思想就是每一次排序都找到乙個基準元素,將小於基準元素的元素放在基準元素的左邊,將大於基準元素的元素放在基準元素的右邊。通過這個描述大概就知道了,快速排序的關鍵是找到這個基準元素。

private

funquicksort

(array: intarray, left: int, right: int)

//進行第一輪排序獲取分割點

val index =

partition

(array, left, right)

//排序前半部分

quicksort

(array, left, index -1)

//排序後半部分

quicksort

(array, index +

1, right)

tv_result.text = array.

tostring()

}private

funquick

(array: string)

if(array.

isnotempty()

)}

以上是快速排序的的實現部分,其中乙個方法非常關鍵,就是partition()。這個方法用來確定基準元素。

private

funpartition

(array: intarray, left: int, right: int)

: int

//將基準元素與array[nextelement]交換

val tag = array[left]

array[left]

= array[lastelement]

array[lastelement]

= tag

//返回基準元素所在位置

return lastelement

}

經過比照發現,數值比較少的時候插入排序演算法比快速排序演算法更快,效率更高。足見「快排」只是平均效能最好。

​ 最近由快排延伸去研究了一下別的排序演算法,算是對於演算法第一次細緻研究。演算法這東西,還是挺有搞頭的,鍛鍊數學技能。之後有機會再去研究其他的常用演算法,畢竟要多多少少了解一下。

Android 系統字型規範與應用探索

檔案中得未上傳 建議閱讀原文 android 系統字型規範與應用探索白群 1.移動設計中與字型大小有關的基本概念 l sp 與 px 的換算公式 sp ppi 160 px 2.android 系統預設字型 rotobo,限定使用以下字型大小 3.android 字型單位sp與 px的換算 l pp...

氣泡排序與選擇排序的不同 快速排序與選擇排序的結合

氣泡排序可以說是最簡單的排序了。我們學習c語言迴圈的時候都會提到。可見這是一種淺而易懂的排序演算法!但不見得這種演算法就沒用處。首先,他很容易理解,這樣在各種教材中比較適合拿來 開門見山 其次是他很穩定。若明確知道即將排的數字很混亂,隨機性很強,則用氣泡排序也未償不可。誰讓他始終是o n 2 呢。氣...

氣泡排序與選擇排序的不同 快速排序與選擇排序的結合

氣泡排序與選擇排序的不同 快速排序與選擇排序的結合 氣泡排序可以說是最簡單的排序了。我們學習c語言迴圈的時候都會提到。可見這是一種淺而易懂的排序演算法!但不見得這種演算法就沒用處。首先,他很容易理解,這樣在各種教材中比較適合拿來 開門見山 其次是他很穩定。若明確知道即將排的數字很混亂,隨機性很強,則...