• 数组中奇数全部放到偶数前。


    (1)、将数组A[0.....n]中所有的奇数移到所有偶数前,要求不增加存储空间,且时间复杂度为O(n)

    //算法分析:**设置两个指针i,j。其中i从左往右,j从右往左。当i指向偶数,j指向奇数时交换两个位置的值。当i>j时结束。**
    void MoveForward(int a[],int n)
    {
        int i=0;
        int j=n-1;
        int temp;
        while(i<j)
        {
            while(a[i]%2==1&&i<j)
                i++;
            while(a[j]%2==0&&i<j)
                j--;
            if(i<j)
            {
                temp=a[i];
                a[i]=a[j];
                a[j]=temp;
                i++;
                j--;
            }
        }
        for(i=0;i<n;i++)
        {
            cout<<' '<<a[i];
        }
    }
    

    注:以上解法来自天勤。
    我的思路:使用i依次按位置访问元素值,若为偶数在后面找到一个奇数交换,若为奇数就跳过。

    void MoveForward1(int a[],int n)
    {
        int i=0;
        int j;
        int temp;
        while(i<n)//i用来遍历整个数组
           {
                if(a[i]%2==0)//判断是奇数,本来在此处if后面加了一个else判断偶元素时从后面找奇数替换,然后意识到是费操作。
                    {
                        for(j=i+1;j<n;j++)//从当前元素的后面寻找奇数元素。
                        {
                            if(a[j]%2==1)
                            {
    
                                temp=a[i];
                                a[i]=a[j];
                                a[j]=temp;//交换后面的偶数这一轮的奇数。
                                break;
                            }
                        }
                    }
                i++;
            }
            for(i=0;i<n;i++)
                cout<<" "<<a[i];
    }
    


    这就做出来了,之前还做了交换前面的奇数到后面的偶数这样的费操作,增加了循环的次数,如果遇到奇数直接就可以不理会。往后寻找偶数。

  • 相关阅读:
    uva 1511 最小生成树
    百度之星2017初赛A-1006-度度熊的01世界
    工作5年总结-总结这两年在阳光的日子
    在visual studio中查看源代码
    根据C#编程经验思考编程核心
    项目的可维护可持续性思考
    java学习
    What is ASP.NET SignalR
    WCF 和 ASP.NET Web API
    wcf服务
  • 原文地址:https://www.cnblogs.com/jearchen/p/9818962.html
Copyright © 2020-2023  润新知