您好,登錄后才能下訂單哦!
小編給大家分享一下web開發中如何實現快速排序,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要 Ο(nlogn) 次比較。在最壞狀況下則需要 Ο(n2) 次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他 Ο(nlogn) 算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來。
快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)。
快速排序又是一種分而治之思想在排序算法上的典型應用。本質上來看,快速排序應該算是在冒泡排序基礎上的遞歸分治法。
從數列中挑出一個元素,稱為 “基準”(pivot);
重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作;
遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序;
遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。
來源:https://github.com/hustcc/JS-Sorting-Algorithm
首先,操作數列中的所有數字
在所有數字中選擇一個數字作為排序的基準(pivot), pivot 通常是隨機選擇的,在這里為了演示方便,我們選擇最右邊的數字作為 pivot
選取好 pivot 后,在操作數列中選擇最左邊的數字標記為 左標記 ,最右邊的數字標記為 右標記
將左邊的標記向右移動
當 左標記 達到超過 pivot 的數字時,停止移動
在這里,8 > 6 ,所以停止移動
然后將右邊的標記向左移動
當 右標記 達到小于 pivot 的數字時,停止移動
在這里,4 < 6 ,所以停止移動
當左右標記停止時,更改標記的數字
因此,左標記 的作用是找到一個大于 pivot 的數字,右標記 的作用是找到一個小于 pivot 的數字
通過交換數字,可以在數列的左邊收集小于 pivot 的數字集合,右邊收集大于 pivot 的數字集合
交換之后,繼續移動 左標記
在這里,9 > 6 ,所以停止移動
然后將右邊的標記向左移動
當 右標記 碰撞到 左標記 時也停止移動
如果左右側的標記停止時,并且都在同一個位置,將這個數字和 pivot 的數字交換
這就完成了第一次操作
小于 6 的都在 6 的左側,大于 6 的都在 6 的右側
然后遞歸對這分成的兩部分都執行同樣的操作
完成 快速排序
為了更好的讓讀者用自己熟悉的編程語言來理解動畫,筆者將貼出多種編程語言的參考代碼,代碼全部來源于網上。
以上是“web開發中如何實現快速排序”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。