演算法系列 二

2021-09-09 03:59:40 字數 1432 閱讀 3020

長時間沒接著寫了,今天接著未完成的革命,接下來就是快速排序:

快速排序的思想就是先選取乙個基準點,然後將小於基準點的放在基準點的左邊,大於基準點的數放在基準點右邊,然後將左、右邊的陣列再重複上述步驟直到全部排序完成。

還是如陣列:20 、40、50、10、60       

left指標指向20,right指標指向60,base參照數指向20。

其實思想是蠻簡單的,就是通過第一遍的遍歷(讓left和right指標重合)來找到陣列的切割點。

第一步:首先我們從陣列的left位置取出該數(20)作為基準(base)參照物。

第二步:從陣列的right位置向前找,一直找到比(base)小的數,

如果找到,將此數賦給left位置(也就是將10賦給20),

此時陣列為:10,40,50,10,60,

left和right指標分別為前後的10。

第三步:從陣列的left位置向後找,一直找到比(base)大的數,

如果找到,將此數賦給right的位置(也就是40賦給10),

此時陣列為:10,40,50,40,60,

left和right指標分別為前後的40。

第四步:重複「第二,第三「步驟,直到left和right指標重合,

最後將(base)插入到40的位置,

此時陣列值為: 10,20,50,40,60,至此完成一次排序。

第五步:此時20已經潛入到陣列的內部,20的左側一組數都比20小,20的右側作為一組數都比20大,

以20為切入點對左右兩邊數按照"第一,第二,第三,第四"步驟進行,最終快排大功告成。

附上js實現**:

1

//快速排序

2function quicksort(arr,left,right)

9return arr;

10 }

1112

function division(arr,left,right)

18 arr [left ]=arr[right ];//

將找到的值賦給左指標

1920

while (left //

對左指標向右側移動,直到找到比基準值大的值

21 left ++;

22 }

23 arr[right ]=arr[left ];//

將找到的值賦給右指標

24 }

25 arr[left ]=baseitem ;//

兩針重合後將基準值賦給左指標;最終,我們發現left位置的左側數值部分比left小,left位置右側數值比left大

26return left ;//

返回重合後此時的指標位置

27 }

優秀演算法系列 排序演算法(二)

它是將乙個已經有序的資料序列,在這個已經排好的資料序列中插入乙個數,但要求插入後此資料序列仍然有序一種新的排序方法。插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的 個數加一的有序資料,演算法適用於少量資料的排序。它的過程是 把要排序的陣列分成兩部分 第一部分包含了這個...

彩票演算法系列講座(二)

七個小矮人 自從白雪公主跟王子走了後,七個小矮人的生活就沒有了樂趣。一天,他們聚在一起,悶悶不樂。老七說 我想白雪公主。老六說 我也想 老五說 我好像聽到她在唱歌。老四說 我就在心裡想,我不說。老三說 我情願她一直不醒過來。老二說 別說了,要想哭 老大吼 煩不煩,3d開獎了!後來,他們一起出去找白雪...

java演算法系列

棧的概念 棧是一種特殊的線性表,堆疊的資料元素以及資料元素之間的關係和線性表是完全一樣的。差別是線性表是在任意位置進行插入和刪除操作,棧是只允許在固定的一端進行插入和刪除,棧的插入和刪除只允許在棧頂,棧的插入和刪除通常稱為進棧和出棧。資料集合 每個資料元素的資料型別可以是任意的型別 操作的集合 進棧...