普通快速排序

本站文章均为Jensen抹茶喵原创,转载务必在明显处注明:
转载自
【博客园】 原文链接:http://www.cnblogs.com/JensenCat/p/5006858.html

 

普通快排第一轮的思想:

 

 

下面上C++实现代码

#include<iostream>
using namespace std;

////////////////////////////////////
//数组类型快速排序(普通快排)
///////////////////////////////////
template<typename T>
void quickSort(T* container ,unsigned int beginIdx ,unsigned int endIdx)
{
    //递归跳出条件
    if(beginIdx >= endIdx)
    {
        return;
    }

    //取中间值,开头索引以及末尾末尾
    unsigned int p = beginIdx;
    unsigned int q = endIdx;
    T midValue = container[beginIdx];
    bool bIsReverse = false;//是否反向

    while(p != q)
    {
        if(false == bIsReverse)
        {
            //从后往前
            if(container[q] < midValue)
            {
                std::swap(container[q] , container[p]);
                bIsReverse = true;
            }
            else
            {
                --q;
            }
        }
        else
        {
            //从前到后
            if(container[p] > midValue)
            {
                std::swap(container[p] , container[q]);
                bIsReverse = false;    
            }
            else
            {
                ++p;
            }
        }
    }

    //上面完成一轮..开始递归执行自己
    quickSort(container , beginIdx , p - 1);
    quickSort(container , p + 1 , endIdx);
}

void main()
{
    //快排例子
    int naArray[9] = { 5 , 7 , 8 ,2 , 1 ,3 ,4 , 8 , 9};
    quickSort(naArray , 0 , 8);
    for(int i=0;i<9;++i)
    {
        cout<<naArray[i]<<endl;
    }

    system("pause");
}

 

输出结果:

 

posted @ 2015-11-30 13:42  Jensen抹茶喵  阅读(305)  评论(0编辑  收藏  举报