最近学数据结构,就试着写了下,虽然结果正常,但也难免有错,希望能指出。

 /**//*
/**//*
 快速排序。
快速排序。
 */
*/
 #include <iostream>
#include <iostream>

 using namespace std;
using namespace std;


 /**//*交换元素*/
/**//*交换元素*/
 template<typename _Ty>
template<typename _Ty>

 inline void Swap(_Ty& _f,_Ty& _s)
inline void Swap(_Ty& _f,_Ty& _s) {
{
 _Ty _t=_f;
    _Ty _t=_f;
 _f=_s;_s=_t;
    _f=_s;_s=_t;
 }
}


 /**//*一次排序*/
/**//*一次排序*/
 template<typename _Ty>
template<typename _Ty>
 int Partition(_Ty* _arr,int _beg,int _end)
int Partition(_Ty* _arr,int _beg,int _end)


 {
{
 int _index=_beg;
    int _index=_beg;
 _Ty _p=_arr[_beg];
    _Ty _p=_arr[_beg];

 while(true)
    while(true)

 
     {    //左移后索引 直到一个小于_p的值
{    //左移后索引 直到一个小于_p的值
 while(_beg<_end&&_arr[_end]>=_p)--_end;
        while(_beg<_end&&_arr[_end]>=_p)--_end;
 //右移前索引 直到一个大于_p的值 ++跳过_p的检验
        //右移前索引 直到一个大于_p的值 ++跳过_p的检验 
 while(_beg<_end&&_arr[++_beg]<=_p);
        while(_beg<_end&&_arr[++_beg]<=_p);
 //前后索引相遇退出
        //前后索引相遇退出
 if(_beg==_end)break;
        if(_beg==_end)break;
 //交换前后索引处的值,使的 左<_p<右
        //交换前后索引处的值,使的 左<_p<右
 Swap(_arr[_beg],_arr[_end]);
        Swap(_arr[_beg],_arr[_end]);
 }
    }
 //将_p与索引处值交换
    //将_p与索引处值交换
 Swap(_arr[_beg],_arr[_index]);
    Swap(_arr[_beg],_arr[_index]);
 return _beg;
    return _beg;
 }
}


 /**//*排序*/
/**//*排序*/
 template<typename _Ty>
template<typename _Ty>
 void QSort(_Ty* _arr,int _beg,int _end)
void QSort(_Ty* _arr,int _beg,int _end)


 {
{
 if(_beg>=_end)return;
    if(_beg>=_end)return;

 int _pos=Partition(_arr,_beg,_end);
    int _pos=Partition(_arr,_beg,_end);

 QSort(_arr,_beg,_pos-1);
    QSort(_arr,_beg,_pos-1);
 QSort(_arr,_pos+1,_end);
    QSort(_arr,_pos+1,_end);
 }
}


 /**//*快速排序*/
/**//*快速排序*/
 template<typename _Ty>
template<typename _Ty>
 void QuikeSort(_Ty* _arr,int _size)
void QuikeSort(_Ty* _arr,int _size)


 {
{
 QSort(_arr,0,_size-1);
    QSort(_arr,0,_size-1);
 }
}



 /**//*打印数组*/
/**//*打印数组*/
 template<typename _Ty>
template<typename _Ty>
 void OutArr(_Ty* _arr,int _size,ostream& _Os=cout)
void OutArr(_Ty* _arr,int _size,ostream& _Os=cout)


 {
{
 for(int i=0;i<_size;++i)
    for(int i=0;i<_size;++i)
 _Os<<_arr[i]<<" ";
        _Os<<_arr[i]<<" ";
 _Os<<endl;
    _Os<<endl;
 }
}

 int main()
int main()


 {
{
 int arr[100];
    int arr[100];

 for(int i=0;i<100;arr[i++]=rand()%100);
    for(int i=0;i<100;arr[i++]=rand()%100);

 QuikeSort(arr,100);
    QuikeSort(arr,100);

 OutArr(arr,100);
    OutArr(arr,100);
 }
}