Pages

2011年6月6日 星期一

[演算法] MergeSort跟QuickSort的程式架構

1.   Merge Sort的精神就是把陣列切割。所以演算法如下:
      以下的start、mid、end都是陣列的索引值。
      void merge(int *data, int start, int mid, int end)
      {
            這個函式做合併的動作。
      }
      void mergeSort(int *data, int start, int end)
      {
            如果start == end,就return;
            //這個函式做切割的動作。
            (i)   先切成:mid = (start+end)/2,這代表一個陣列切成start到mid跟mid到end。
            (ii)  把start到mid的部分遞迴給自己切。mid+1到end遞迴給自己切。
            (iii) 把start到end部分陣列送給merge合併。
       }
2.   Quick Sort:
      QS
把以上這個圖所做的動作寫在一個函式裡(假設此函式叫做A),在這個函式的最後回傳個索引值:i+1。
這樣就可以在QuickSort函式內利用遞迴,以下是QuickSort函式類內容架構:
   Quick Sort終止條件:if( indexLeft >= indexRight) return;
   int cut = A(data, indexLeft, indexRight);
   QuickSort(data, indexLeft, cut-1);
   QuickSort(data, cut+1, indexRight);

沒有留言:

張貼留言