上篇博客我們主要聊了比較高效的歸并排序算法,本篇博客我們就來(lái)介紹另一種高效的排序算法:快速排序。快速排序的思想與歸并排序類似,都是采用分而治之的方式進(jìn)行排序的。快速排序的思想主要是取出無(wú)序序列中第一個(gè)值,然后通過(guò)比較將比該值小的元素放到該值的前方,將比該值大的元素放在該值的后方。這樣一來(lái)該值前方的數(shù)據(jù)都要比該值小,該值后方的數(shù)據(jù)都要比該值大。然后再次對(duì)前半部分和后邊半部分無(wú)序的數(shù)列進(jìn)行上述操作,這樣不斷的操作,無(wú)序的序列的規(guī)模不斷被縮小。等問(wèn)題的規(guī)模被縮小到一定程度后,我們的序列就變的有序了。
之前我們說(shuō)過(guò),當(dāng)一個(gè)問(wèn)題可以被分成一些相同的子問(wèn)題時(shí),我們就可以使用遞歸來(lái)操作。所以在快速排序的過(guò)程中,我們是通過(guò)遞歸的方式將問(wèn)題規(guī)模逐漸減小,知道序列為序?yàn)橹?。本篇博客將?huì)給出這一過(guò)程,根據(jù)示意圖,給出相應(yīng)的代碼實(shí)現(xiàn)。
一、將無(wú)序數(shù)組進(jìn)行拆分
在本篇博客,我們先聊一聊如果將大的問(wèn)題拆分成一些相同的子問(wèn)題。我們需要對(duì)需要排序的數(shù)組進(jìn)行拆分,從無(wú)序序列中取出一個(gè)值,然后通過(guò)比較,將比該值大的放在該值的后方,比該值小的,放在該值的前方。本部分,我們將給出相應(yīng)的示意圖以及代碼實(shí)現(xiàn)。