子弹 の VISIONS

NEVER back down ~~

C++博客 首页 新随笔 联系 聚合 管理
  112 Posts :: 34 Stories :: 99 Comments :: 0 Trackbacks

试编写算法,将数组 int A[n]中的所有奇数移到所有偶数之前,要求时间复杂度为 O(n)。
这是南京大学2001的研改编题

/// 其他人的题目,未作考究。

const int N = sizeof(A);
int foreward =0, backward =N-1;

while(foreward < backward)
{
    if (A[foreward] % 2) //odd
        ++foreward;
    else
    {
        if ( !(A[backward] % 2) ) //even
            --backward;
        else
        {
            int temp = A[foreward];
            A[foreward] = A[backward];
            A[backward] = temp;
            ++foreward;
            --backward;
        }
    }
}

//mode: C++

posted on 2006-12-20 14:29 子弹のVISIONS 阅读(260) 评论(2)  编辑 收藏 引用

Feedback

# re: 练习之一 2006-12-20 15:33 Dain
快速排序的划分思想  回复  更多评论
  

# re: 练习之一 2007-09-14 16:24 uindex
楼主的算法一直是按一个整体处理的,比较的次数是N,也就是首先看头是奇数不,是就跳过,如果不是看尾是偶数不,是就向前再看一个是偶数不,没有就完事了,如果有,就把现在头的奇数和这个尾的偶数交换。  回复  更多评论
  


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理