zoukankan      html  css  js  c++  java
  • 数组移位

    题目:一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移动M位(M>=0),将数组(A1A2...An-1An)变化成(An-mAn-m+1...A1...An-m-1)。

    书本上提供的方法是:(1)每次向右移动一位,移动M次。移动次数N*M。

              (2)先将数组倒序,再局部倒序两次。即(A1....An)->(An...A1)->(An-m...AnAn-m-1....A1)->(An-mAn-m+1...A1...An-m-1)。移动次数3N次。

    自创方法,跳变法。将原始位装入m位后的位置,m位数据寄存在temp中,再往右m位。如果回到原始起点并且计算次数未达数组长度,则原始位+1继续上述过程。当计算次数等于数组长度的时候,过程结束。大约使用N次交换。

    //研究跳变的数组下标是否有重复
    
    void countingIndex()
    {
        int a=0;
        int a1=0;
        int b=10;
        int c=9;
        int i=0;
        while(1)
        {
            cout<<a<<endl;
            i++;
            a+=c;
            if(a>(b-1))
                a=a-b;
            if(a==a1 && i!=b)
            {
                a+=1;
                a1+=1;
            }
            else if(i==b)
                break;
                
        }
        cout<<"次数:"<<i<<endl;
    }

      

    //数组移动---改变数组结构版本
    void Arraymoving1(int a[],int M,int N)
    {
        if(M==0)
            return;
        else if(M%N==0)
            return;
        else
        {
            int begin=0;
            int mark=0;
            int b=N;
            int c=M%N;//处理成小于长度的余数
            int i=0;
            int temp=a[begin];
            while(1)
            {
                //当前状态
    
    
                i++;
                //跳转状态+M
                begin+=c;        
                if(begin>(b-1))
                    begin=begin-b;
                //交换
    
    
                swapNumber(temp,a[begin]);
    
    
                if(begin==mark && i!=b)
                {
                    begin+=1;
                    mark+=1;
                    temp=a[begin];
                }
                else if(i==b)
                    break;        
            }
            cout<<"次数:"<<i<<endl;
            return;
        }
    }

      

  • 相关阅读:
    CentOS优化
    C++ 与OpenCV 学习笔记
    常用ubuntu命令
    对极几何笔记
    DBoW2 词袋模型笔记
    OKVIS(一)初始化流程及代码结构
    二进制描述子 BRIEF(ORB), BRISK, FREAK
    VIO 初始化小结
    VINS(十)FeatureManager(未完待续)
    VINS(九)Ceres Solver优化(未完待续)
  • 原文地址:https://www.cnblogs.com/chentingk/p/5368558.html
Copyright © 2011-2022 走看看