快速排序 雙邊掃瞄與單邊掃瞄的實現

2021-07-03 21:06:50 字數 766 閱讀 9079

快速排序 時間複雜讀o(n*logn),最差o(n^2),平均o(n*logn)

主要思想是選取乙個標誌位,大於標誌位的放到右邊,小於標誌位的放到左邊,在以標誌位為分割,分而制之,左遞迴,右遞迴,直到完成。

快速排序的思想(雙邊掃瞄)

快速排序就像乙個資料快,前後各有乙個下標(指標)i/j,隨機選取(此處取下標為0的)乙個元素作為標誌位,儲存在臨時變數中(tmp),j從後向前移動(j--)直到碰到比tmp還要小的數時與i交換,此時i開始像後走,直到遇到第乙個比tmp大的數,與j交換。

遞迴直至完成。

快速排序思想(單邊掃瞄)

從左到右掃一遍,類似於氣泡排序,只是不停的把小於標誌位的值放到左邊,大於的放到右邊,找到分割位置將標誌位放入。

單邊掃瞄怎麼把小於標誌位(下標end)的放左邊,大於標誌位的放右邊,雙邊掃瞄是通過挖坑埋數的方式來實現的,單邊掃瞄可以通過乙個small 標誌位記錄連續最小的哪乙個數,index一直向前走找到第乙個不連續的小於標誌位的值,與small++(第乙個大於標誌位的值)進行交換,直到迴圈結束,將small++的值放到標誌位end的下標位置。

注:如有錯誤,望批評指正,演算法主要是思想,其次就是按照思想去實現了。

//雙邊

int partition2(long *str,int start,int end,int length)

int partition2(long *str,int start,int end,int length)

void main()

快排之單邊掃瞄和雙邊掃瞄策略

在這麼多的排序演算法中,不考慮桶排序,只有堆排序 快速排序 歸併排序的時間複雜度是o nlogn 今天就來討論一下神奇的排序演算法 快速排序 之所以說快排是個神奇的演算法,不僅僅是因為其時間複雜度較低,其中包含的幾個比較重要的思想非常值得我們學習一下 快速排序演算法包含其中乙個思想就是分治思想,這也...

快速排序雙向掃瞄

package 排序 思想 partition部分是從第二個元素開始作為左指標與第乙個元素 主元 進行比較 如果左指標對應的元素小於等於主元,那麼左指標繼續向右移動,直到左指標對應的元素大於主元 輪到右指標進行掃瞄,如果右指標對應的元素比主元大,那麼右指標向左移動,直至主元大於右指標對應的元素,那麼...

spring概念簡介 bean掃瞄與註冊實現方式

寫在前面 本文作為整理,包含很多個人理解,有跳躍成份,初學者如果看暈了,可以先看其它同類文章,或者 多看幾遍。1 spring概念 網上有很多 2 spring核心 ioc di 和aop 3 ioc 控制反轉,控制權的轉移,應用程式本身不負責依賴物件的建立和維護,而是由外部容器負責建立和維護,只是...