代码改变世界

快速排序c++实现及解释

2008-11-18 21:04  Iron  阅读(380)  评论(0编辑  收藏  举报
#include<iostream>
using namespace std;
template <class T>
int Partition(T a[],int left,int right)
{
     int i = left, j = right + 1;
     T x = a[left];
     /*快排这个核心函数的原理是:
     1,保持基准元素不动,从下一个元素开始从左往右找到比基准元素大的,停下;
     2,保持基准元素不动,从下一个元素开始从右往左找到比基准元素小的,停下;
     3,交换这两个元素的位置。
     4,重复步骤(1)(2)(3),直到i与j相遇或错开。
     5,将基准元素和最后一个小于基准元素值的元素交换,一次快排结束
     */
     for(;;)
     {
         while(a[++i] < x);
         while(a[--j] > x);
         if(i >= j) break;
         int temp;
         temp = a[i];
         a[i] = a[j];
         a[j] = temp;
     }
     a[left] = a[j];
     a[j] = x;
     return j;
}
template <class T>
void QuickSort(T a[],int left,int right)
{
     if(left < right)
     {
           //执行快排
           int j=Partition(a,left,right);
           //按基准元素分为两部分后分别执行快排
           QuickSort(a,left,j-1);
           QuickSort(a,j+1,right);
     }
}

int main()
{
     int intArray[5] = { 2 , 5 , 1 , 3 , 4};
     QuickSort(intArray, 0, 4);
      for(int i = 0; i < 4; i++)
            cout << intArray[i] << endl;
     return 0;
}