快速排序算法

//算法核心思想并不难理解,即取一个值作为参考值,大于等于参考值的放在一边,小于参考值的放在另一边
//程序实现的核心是对两个指针的操作,针对每一个无序的块使用两个指针,一个从左向右滑动,另一个相反,
//向右滑动的指针如果碰到一个大于参考值的数,则另一个指针开始向右滑动,直到找到一个小于参考值的数,然后二者交换位置
#include <iostream>
using namespace std;
void myqsort(int* x,int* y)
{
    int temp,w,* u,*v;
    u=x;v=y;w=*y;
    if(x==y)return;
    while(u!=v)//开始调换元素位置,大于等于w的放在右边,其余放在左边
    {
        if(*u>w)//检查当前u所指向的元素是否大于末尾元素的值,是则执行下面语句块
        {
            //向左查找可以交换的元素
            while(u!=v)
            {
                if(*v<=w){temp=*u;*u=*v;*v=temp;break;}//找到这样一个元素,则立即进行交换
                v--;
            }
        }
        if(u==v)break;
        u++;
    }
    myqsort(x,u-1);
    myqsort(u,y);
}
int _tmain(int argc, _TCHAR* argv[])
{
    int a[]={8,992,35,78,123,6,5,1,10,88,99,123,754,1000,1,0,55};
    myqsort(a,a+sizeof(a)/4-1);
    for(auto& x:a)cout<<x<<endl;
    return 0;
}
posted @ 2013-07-31 23:34  SKY_VIEW  阅读(353)  评论(0编辑  收藏  举报