打印

程序复杂度问题

[复制链接]
935|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
pkat|  楼主 | 2013-3-29 23:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
void swap(int* a,int* b)
{
    *a = *a ^ *b;    //a、b中不同位
    *b = *a ^ *b;    //b = a
    *a = *a ^ *b;    //a = b
}
void ArrangArray(int* StartPos,int* EndPos)
{
    //Step1先将小于零的放在最左边,大于等于0的数不区分,都放在右边
    int* low = StartPos;
    int* high = EndPos;
    while(low < high)
    {
        while( *low < 0 && low < high ) low++;
        while( *high >= 0 && low < high ) high--;
        if(low < high)
            swap(low,high);
    }//由于里面循环和外面都是对low和high的判断,我个人认为是    n
    //循环结束时,low一定等于high,且指向大于等于0的数   
    //
    high = EndPos;
    while(low < high)
    {
        while( *low == 0 && low < high ) low++;
        while( *high > 0 && low < high ) high--;
        if(low < high)
            swap(low,high);
    }//同理这里也是n
}
int main()
{
    int array[10] = {-1,3,0,2,-5,0,-3,4,0,-8};
    ArrangArray(array,array + 9);
}
所以整体复杂度为O(2n),这样分析对不对?

相关帖子

沙发
秋天落叶| | 2013-3-29 23:26 | 只看该作者
最坏O(N)平均O(log(N))
因为这个其实就是快速排序的划分算法。

使用特权

评论回复
板凳
gxgclg| | 2013-3-29 23:30 | 只看该作者
没仔细看,程序正确与否,正确的划分算法最坏O(N)平均O(log(N))

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

196

主题

2726

帖子

0

粉丝