當(dāng)我們需要對一個無序的數(shù)組進(jìn)行排序時(shí),快速排序算法是一種高效的選擇。它通過將數(shù)組分為兩個較小的子數(shù)組來遞歸地排序最終達(dá)到整個數(shù)組有序。
下面我們來看一段簡單的javascript代碼實(shí)現(xiàn)快速排序:
function quickSort(arr) { if (arr.length<= 1) { return arr; } const pivot = arr[Math.floor(arr.length / 2)]; const left = []; const right = []; for (let i = 0; i< arr.length; i++) { if (i === Math.floor(arr.length / 2)) { continue; } if (arr[i]< pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); } const unsortedArray = [3, 1, 8, 4, 7, 2, 6, 5]; console.log(quickSort(unsortedArray)); // [1, 2, 3, 4, 5, 6, 7, 8]
我們從數(shù)組中選擇中點(diǎn)(pivot),并將其與數(shù)組中其他元素進(jìn)行比較。將小于pivot的元素放入left子數(shù)組中,大于pivot的元素放入right子數(shù)組中。遞歸地對left和right子數(shù)組進(jìn)行排序,并將結(jié)果返回。最后,將排序后的left子數(shù)組、pivot和排序后的right子數(shù)組連接在一起即可得到有序的數(shù)組。
下面讓我們看一下算法的時(shí)間復(fù)雜度。快速排序算法的平均時(shí)間復(fù)雜度為O(n log n),最壞情況下時(shí)間復(fù)雜度為O(n^2)。最壞情況下的情形是當(dāng)數(shù)組的pivot點(diǎn)選取不當(dāng)時(shí),每個遞歸分治的子數(shù)組都非常接近于原數(shù)組,而遞歸過程會無限地進(jìn)行下去。但通過隨機(jī)選取pivot點(diǎn)或選用其他特殊的pivot選取方法可以減少出現(xiàn)最壞情況的概率。
快速排序是一種高效的排序算法。它不需要額外的存儲空間,而且在處理大數(shù)據(jù)集時(shí)表現(xiàn)良好。因此,它經(jīng)常被用于web應(yīng)用程序中的數(shù)據(jù)處理。