快速排序

来源:互联网 发布:淘宝如何判定做工瑕疵 编辑:程序博客网 时间:2024/05/21 10:29
//递归调用版
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

原创粉丝点击