快速排序


快速排序是一種高效的排序演算法,並基於分割資料的陣列成更小的陣列。一個大的陣列被劃分成兩個陣列,其中一個保持值比規定的值小的表示基於支點在其上的分割區是由與另一個陣列儲存值大於支點的值。

快速排序分割陣列,然後呼叫自身遞回兩次排序得到的兩個子陣列。該演算法對大型資料集作為平均和最壞情況的複雜性相當有效率為O(nlogn),其中n是專案的數目。

Quick Sort Partition Animation

虛擬碼

A : array of items 

procedure quickSort(left, right)
   if right-left <= 0
      return
   else     
      pivot = A[right]
      partition = partitionFunc(left, right, pivot)
      quickSort(left,partition-1)
      quickSort(partition+1,right)    
   end if		
end procedure

function partitionFunc(left, right, pivot)
   leftTutorialser = left -1
   rightTutorialser = right

   while True do
      while A[++leftTutorialser] < pivot do
         //donothing            
      end while
		
      while rightTutorialser > 0 && A[--rightTutorialser] > pivot do
         //donothing         
      end while
		
      if leftTutorialser >= rightTutorialser
         break
      else                
         swap leftTutorialser,rightTutorialser
      end if
		
   end while      
   swap leftTutorialser,right
   return leftTutorialser
end function

procedure swap (num1, num2)
   temp = A[num1]
   A[num1] = A[num2]
   A[num2] = temp;
end procedure

要檢視C程式設計語言快速排序的實現,請點選這裡