中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

web開發中如何實現快速排序

發布時間:2022-01-17 11:21:20 來源:億速云 閱讀:197 作者:小新 欄目:大數據

小編給大家分享一下web開發中如何實現快速排序,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!


快速排序

快速排序是由東尼·霍爾所發展的一種排序算法。在平均狀況下,排序 n 個項目要 Ο(nlogn) 次比較。在最壞狀況下則需要 Ο(n2) 次比較,但這種狀況并不常見。事實上,快速排序通常明顯比其他 Ο(nlogn) 算法更快,因為它的內部循環(inner loop)可以在大部分的架構上很有效率地被實現出來。

快速排序使用分治法(Divide and conquer)策略來把一個串行(list)分為兩個子串行(sub-lists)。

快速排序又是一種分而治之思想在排序算法上的典型應用。本質上來看,快速排序應該算是在冒泡排序基礎上的遞歸分治法。

算法步驟

  1. 從數列中挑出一個元素,稱為 “基準”(pivot);

  2. 重新排序數列,所有元素比基準值小的擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數可以到任一邊)。在這個分區退出之后,該基準就處于數列的中間位置。這個稱為分區(partition)操作;

  3. 遞歸地(recursive)把小于基準值元素的子數列和大于基準值元素的子數列排序;

遞歸的最底部情形,是數列的大小是零或一,也就是永遠都已經被排序好了。雖然一直遞歸下去,但是這個算法總會退出,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。

來源:https://github.com/hustcc/JS-Sorting-Algorithm

算法演示

web開發中如何實現快速排序

排序動畫過程解釋

  1. 首先,操作數列中的所有數字

  2. 在所有數字中選擇一個數字作為排序的基準(pivot), pivot 通常是隨機選擇的,在這里為了演示方便,我們選擇最右邊的數字作為 pivot

  3. 選取好 pivot 后,在操作數列中選擇最左邊的數字標記為 左標記 ,最右邊的數字標記為 右標記

  4. 將左邊的標記向右移動

  5. 當 左標記 達到超過 pivot 的數字時,停止移動

  6. 在這里,8 > 6 ,所以停止移動

  7. 然后將右邊的標記向左移動

  8. 當 右標記 達到小于 pivot 的數字時,停止移動

  9. 在這里,4 < 6 ,所以停止移動

  10. 當左右標記停止時,更改標記的數字

  11. 因此,左標記 的作用是找到一個大于 pivot 的數字,右標記 的作用是找到一個小于 pivot 的數字

  12. 通過交換數字,可以在數列的左邊收集小于 pivot 的數字集合,右邊收集大于 pivot 的數字集合

  13. 交換之后,繼續移動 左標記

  14. 在這里,9 > 6 ,所以停止移動

  15. 然后將右邊的標記向左移動

  16. 當 右標記 碰撞到 左標記 時也停止移動

  17. 如果左右側的標記停止時,并且都在同一個位置,將這個數字和 pivot 的數字交換

  18. 這就完成了第一次操作

  19. 小于 6 的都在 6 的左側,大于 6 的都在 6 的右側

  20. 然后遞歸對這分成的兩部分都執行同樣的操作

  21. 完成 快速排序

代碼實現

為了更好的讓讀者用自己熟悉的編程語言來理解動畫,筆者將貼出多種編程語言的參考代碼,代碼全部來源于網上。

C++代碼實現

web開發中如何實現快速排序

Java代碼實現

web開發中如何實現快速排序

Python代碼實現

web開發中如何實現快速排序

JavaScript代碼實現

web開發中如何實現快速排序

以上是“web開發中如何實現快速排序”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

web
AI

寻乌县| 五寨县| 西乡县| 大石桥市| 洮南市| 县级市| 堆龙德庆县| 舟曲县| 富源县| 通化市| 玛纳斯县| 安宁市| 客服| 公主岭市| 锦屏县| 原平市| 建湖县| 泸水县| 方正县| 石城县| 沂南县| 桃源县| 平南县| 桂东县| 胶南市| 邵阳县| 光山县| 汪清县| 喀什市| 西畴县| 海南省| 芜湖县| 娄烦县| 开阳县| 济宁市| 顺义区| 康马县| 莱西市| 同心县| 长丰县| 阳西县|