数组循环右移C#

题目大意是:指定数组右移,只能在数组内,不能用另外的数组。最少移动次数,如何设计。
比如数组{1,2,3,4,5,6,7},右移后排序为{7,6,5,4,3,2,1}
目前想到的最好的方法是,第一位和最后一位互换,第二位和倒数第二位互换,以此类推。数组个数为奇数时,中间的不用动,所以循环的次数就是(数组个数/2)的整数位
代码如下

        /// <summary>
        /// 数组逆序排列
        /// </summary>
        /// <param name="digit">数组</param>
        public int[] SetSequence(int[] digit)
        {
            int count = digit.Count();
            if (count <= 0) return null;
            int k = (count % 2) == 1 ? ((count - 1) / 2) : (count / 2);
            for (int i = 0; i < k; i++)
            {
                int t1 = digit[i];
                int t2 = digit[count - 1 - i];
                digit[i] = t2;
                digit[count - 1 - i] = t1;
            }
            foreach (int item in digit)
            {
                Console.WriteLine(item);
            }
            return digit;
        }

调用后输出结果:

 int[] t = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
 SetSequence(t);

在这里插入图片描述
不管数组右移或左移几位,先将数组排序好之后,逆序获得。
移动的位数k=k%数组.Count();
如果是abcd1234–》1234abcd,
则先应该abcd1234–》dcba4321–》1234abcd

这是我目前想到的最少次数的方法了,如果思路有误或者大家有更好的方法,欢迎交流和指正。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值