資料結構與演算法 快速排序

2022-05-29 17:15:15 字數 1499 閱讀 4305

老樣子,前面有介紹

快速排序,在學習的時候,老師就說,快排,是分而治之。就像中國 960 萬疆土,分成省市縣鎮鄉村去管轄。這就是分而治之。在各自的轄區內,各自管轄,互不干涉,最後再把結果彙總,就形成了我中華960萬的疆土。那這個轄區怎麼劃分?這就需要乙個標準,這個標準就是我們所說的基數。基數怎麼確定?隨便。是的,你沒聽錯,隨便。我可以選擇第乙個數,可以選擇最後乙個數,也可以選擇中間的那個數。同樣,這個基數我也可以是隨機的。那麼,現在的問題來了,就是我現在確定了乙個基數,怎麼去做到分而治之呢?這個時候,有個大神美其名曰:填坑法。很形象,很生動,很通俗易懂。那這個填坑法怎麼去做?我們看圖說話。

system.out.println("排序前:\n" + arrays.tostring(data));

quicksort(data, 0, data.length - 1);

system.out.println("排序後:\n" + arrays.tostring(data));

}/**

* 快速排序,在學習的時候,老師就說,快排,是分而治之。就像中國 960 萬疆土,分成省市縣鎮鄉村去管轄。這就是分而治之。在各自的轄區內,

* 各自管轄,互不干涉,最後再把結果彙總,就形成了我中華960萬的疆土。

* 那這個轄區怎麼劃分?這就需要乙個標準,這個標準就是我們所說的基數。基數怎麼確定?隨便。是的,你沒聽錯,隨便。我可以選擇第乙個數,

* 可以選擇最後乙個數,也可以選擇中間的那個數。同樣,這個基數我也可以是隨機的。

* 那麼,現在的問題來了,就是我現在確定了乙個基數,怎麼去做到分而治之呢?這個時候,有個大神美其名曰:填坑法。很形象,很生動,很通俗

* 易懂。那這個填坑法怎麼去做?我們看圖說話。

** @param data

*/private static void quicksort(int data, int left, int right)

if (p < q)

while (p < q && data[p] < x)

if (p < q)

}data[p] = x;

quicksort(data, left, p - 1);

quicksort(data, p + 1, right);}}

// 這裡要是用到 scala 就很簡單了。可以利用 scala 裡面的模式匹配

資料結構與演算法 排序演算法 快速排序

源 cpp view plain copy include void quicksort int int,int intfindposs int int,int intmain quicksort arry,0,6 printf after sorted n for i 0 i 7 i printf...

資料結構與演算法 快速排序

基礎概念 快速排序,聽這個名字就能想到它排序速度比較快方法,是一種分治思想。所謂分治,就是指以乙個數為基準,將序列中的其他數往它兩邊 扔 以從小到大排序為例,比它小的都 扔 到它的左邊,比它大的都 扔 到它的右邊,然後左右兩邊再分別重複這個操作,不停地分,直至分到每乙個分割槽的基準數的左邊或者右邊都...

資料結構與演算法 快速排序

快速排序在實際應用中使用廣泛,效果也高。快排使用的是分治策略,一組序列基於某乙個基準值分成兩個大小的子串行,遞迴排序子串行,最終得到有序的序列。快排的平均時間複雜度為o nlogn 演算法的實現步驟 1.在序列中挑選乙個基準值,我們可以預設第乙個數為基準值 2.從兩邊的數值跟基準值作對比,數值小的放...