javascript版快速排序算法

快速排序

是一個效率較高的排序算法,每一輪都會把比基準數小的放左邊,比基準數大的放右邊,本文章只是記錄一下過程
盜用一張圖來看看過程javascript

clipboard.png

原文連接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

相關文章
相關標籤/搜索