快速排序

//递归调用版
void QuickSort(int data[], int lo, int hi)
{
    if (lo<hi)
    {
        int k = partition(data, lo, hi);
        QuickSort(data, lo, k-1);
        QuickSort(data, k+1, hi);
    }
}
int partition(int data[],int lo,int hi)  //双向扫描。
{
 int key=data[lo];   //以第一个元素为主元
 int l=lo;
 int h=hi;
 while(l<h)
 {
  while(key<=data[h] && l<h) 
   h--;
  data[l]=data[h];
  while(data[l]<=key && l<h) 
   l++;
  data[h]=data[l];
 }
 data[l]=key;  //1.key。只有出现要赋值的情况,才事先保存好第一个元素的值。
 return l;     //这里和以下所有的Hoare的变形版本都是返回的是枢纽元素,即主元元素l。
}
//非递归版

 

template <class T> void QuickSort(T data[],int lo,int hi) {  stack<int> st;  int key;  do{   while(lo<hi)   {    key=partition(data,lo,hi);       //递归的本质是什么?对了,就是借助栈,进栈,出栈来实现的。    if( (key-lo)<(key-key) )    {     st.push(key+1);         st.push(hi);     hi=key-1;    }    else    {     st.push(lo);     st.push(key-1);     lo=key+1;    }      }   if(st.empty())     return;   hi=st.top();   st.pop();     lo=st.top();   st.pop();    }while(1); } void QuickSort(int data[], int lo, int hi) {     if (lo<hi)     {         int k = RandPartition(data, lo, hi);         QuickSort(data, lo, k-1);         QuickSort(data, k+1, hi);     } }

http://blog.csdn.net/v_JULY_v/article/details/6262915

你可能感兴趣的:(Class)