是一個效率較高的排序算法,每一輪都會把比基準數小的放左邊,比基準數大的放右邊,本文章只是記錄一下過程
盜用一張圖來看看過程javascript
原文連接html
廢話很少說,這篇文章主要來記錄下我實現的過程java
var list = [6,5,5,10,24,2,4]; function quickSort(list,left,right){ if(left < right){ pivotIndex = partition(list,left,right); quickSort(list,left,pivotIndex - 1); quickSort(list,pivotIndex + 1 ,right); } return list; } function partition(list ,left,right){ pivot = list[left]; while( left < right){ while(list[right] > pivot && left < right){ --right; } list[left] = list[right]; while(list[left] <= pivot && left<right){ //list[left] <= pivot 這裏須要知足等於的條件,由於若是存在相等的數, //left將永遠不會大於right,因此要加上等於的狀況, //left<right這個條件很重要,由於若是知足list[left] <= pivot這個後left會++, //此時有可能 left>right,若是不加的話可能會死循環 ++left; } //這裏我發現有些文章沒有作判斷,由於有可能左右相等,因此不必交換 if(list[right] != list[left]){ list[right] = list[left]; } } list[left] = pivot; return left; } console.log(quickSort(list,0,list.length - 1))
我也參考了這些文章的寫法
快速排序
漫畫:什麼是快速排序?git
以前一直不明白,後來查了資料,本身算是明白怎麼回事了,算法仍是得本身手動實現一遍才能懂。github