日期:2014-05-17  浏览次数:20741 次

谁能给我详细讲讲快速排序原理
网上关于快速排序的资料,要么就是原理讲得明白,但是例子根原理不贴边,并且运行出错.要么就是例子是对的,原理看不懂
比如:
void quickSort(int *a,size_t left,size_t right)   {     size_t p = (left + right)/2;      int key = a[p];     for(size_t i = left,j = right; i < j;)     {         while(!(key < a[i] || p < i))             i++;         if(i < p)          {             a[p] = a[i];             p = i;         }         while(j>0 && !(j < p || a[j] < key))             j--;          if(p < j)          {              a[p] = a[j];              p = j;          }      }      a[p] = key;      if(p - left > 1)          quickSort(a,left,p-1);      if(right - p > 1)          quickSort(a,p + 1, right); }

百度百科的这个c++优化版,运行没问题,但是我看不懂他的原理,所以无法改成可逆序的

有比如:
Function QuickSort(MyArray() As Long, L, R, Optional FangXiang As Boolean = True)
 '对单独数组(下标是连续的)进行排序,首次调用时候,L是数组的最小下标,R是最大下标
 'FangXiang=True 是正排序,为False 是逆排序
     Dim i, j, X, Y
     i = L
     j = R
       
     '找出数组的中点
     X = MyArray((L + R) / 2)
     While (i <= j)
         
         If FangXiang Then '※正排序
             '找出比中点大的数