分治法以及快速排序


分治法

  分治法(divide and conquer,D&C):將原問題划分成若干個規模較小而結構與原問題一致的子問題 ;遞歸地解決這些子問題,然后再合並其結果,就得到原問題的解。
  容易確定運行時間,是分治算法的優點之一。
  分支模式在每一層遞歸上都有三個步驟:
    --分解(Divide):將原問題分解為一系列子問題;
    --解決(Conquer):遞歸地解各子問題。若子問題足夠小,則直接有解;
    --合並(Combine):將子問題的結果合並成原問題的解。
  分治法的關鍵點:
    原問題可以一直分解為形式相同子問題,當子問題規模較小時,可自然求解,如一個元素本身有序
    子問題的解通過合並可以得到原問題的解
    子問題的分解以及解的合並一定是比較簡單的,否則分解和合並所花的時間可能超出暴力解法,得不償失

快速排序算法

  1、分解:數組A[p..r]]被划分成兩個子數組A[p..q-1]和A[q+1,r],使得A[q]為大小居中的一個數,左側A[p..q-1]中的每一個元素都小於等於它,而右側A[q+1,r]中的每個元素都大於等於它。其中計算下標q也是划分過程的一部分
  2、解決:通過遞歸調用快速排序,對子數組A[p..q-1]和A[q+1,r]進行排序
  3、合並:因為子數組都是原址排序的,所以不需要合並,數組A[p..r]已經有序
  所以划分非常重要,具體一些划分方法以及優化在下一篇博客介紹。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM