5
回答
请问这个简单排序问题怎样写
【腾讯云】学生服务器套餐10元/月 >>>   

A={“a”,“b”,“c”,“d”}

次序abcd

以A[i]值代入A[j]中,依次排序,如:

A[3]代入A[2]则得出B数组:

B={"b","c","d","a"}

依次类推,请问这个算法我怎么写呀!!

举报
lace
发帖于4年前 5回/537阅
共有5个答案 最后回答: 4年前

有这么麻烦?qt怎么做不知道,python肯定没这么麻烦。就是个切片啊。根本不用区分什么左移右移

我写个php的,供参考。

<?php
//键key转到键$to,也就是挪$key - $to = $shift位
function radio_button($arr, $key, $to){
	$shift = $key - $to;
	return array_merge(array_slice($arr, $shift), array_slice($arr, 0, $shift));
}

$arr = array(0,1,2,3,4,5,6,7,8,9);
$res = radio_button($arr, 4, 5);
print_r($res);



--- 共有 1 条评论 ---
lace确实还是PHP 好用呀! 4年前 回复

题目都说不清楚

--- 共有 1 条评论 ---
lace好吧,我的确说不清,它就像一个调音按钮,可以旋转。 扭转,就会得到一个新的数组。 如:1,2,3,4,5 把第5的值转到2的位置上得出这样排序: 4,5,1,2,3 把第2的值转到3处: 5 1 2 3 4 数据是不会变,只是位置是个圆,转一格,a[0],a[1]的值 就是变成圆前面或后面的值,看你怎样转。 4年前 回复

引用来自“Timco”的评论

挺简单的,数组循环移动而已吧
数组的循环移动,又称数组元素的循环移动.
     数组的循环移动分为循环左移和循环右移两种,我们统一用 shift ( A, n ) 来表示.
A 是一维数组, n 是循环移动的元素个数, n>0 表示右移, n<0 表示左移, n=0 表示不动.
例如:
A = [ 1, 2 , 3 , 4 , 5 ,6 ]
shift( A, 1 ) 后得到 :
           [ 6, 1 , 2 , 3 , 4 , 5 ]
          即从右侧移出的元素,又被从左侧推入了数组之中.
A = [ 1, 2 , 3 , 4 , 5 ,6 ]
shift( A, -1 ) 后得到 :
           [ 2 , 3 , 4 , 5, 6, 1 ]
         即从左侧移出的元素,又被从右侧推入了数组之中.
shift( A, m )
    当 m != 0 时, ( 我们以 m>0 为例讨论 )
    当然我们可以进行 m 次 shift( A , 1 ) 这样所有的元素都被移动了 m 次.
     优化算法:
     我们能不能对于大多数的元素能够移动一次就被移动到它最终的位置?
(1) 当移位次数M>元素个 n 时, 令 M = M % n 因为不管向右还是向左循环移位n 次都使元素回到原来的位置                                                    
(2) 向右移M 位与向左移 n - m 位,作用相同                             
(3) 先将要移出的元素一次性取出存入b 中, 将其他元素一次性移动到目标位,然后将b 推入腾出的空位 .
#coding=gbk
# 数组元素的循环移动
# 入口: 要移动的数组A
#       m 要移动的元素个数
def myshift ( A, m ) :
    m = int( m )
    n = len( A )
    if n<=1 or m==0:
        return
    direction = 1 #右移
    if m < 0 :     #左移
        direction = -1
        m = - m
    m = m % n
    if m == 0:
        return
    if m> (n // 2):                
        m = n - m                   
        direction = - direction
    b = [ 0 ] * m
    if direction==1:
       for i in range(0, m):
           b[i] = A[ n-m+i ]
       for i in range( n-1, m-1, -1 ):
           A[i] = A[i-m]
       for i in range(0,m):
           A[ i ] = b[ i ]
    else:
       for i in range(0, m):
           b[i] = A[ i ]
       for i in range( 0, n-m, 1 ):
           A[i] = A[i+m]
       for i in range(0,m):
           A[ n-m+i ] = b[ i ] A = [ 1, 2 , 3 , 4 , 5 ,6, 7 , 8, 9 ]
print ( "A=", A ,"右移3位后:")
myshift( A, 3 )
print ( A )
A = [ 1, 2 , 3 , 4 , 5 ,6, 7 , 8, 9 ]
print ( "A=", A ,"左移3位后:")
myshift( A, -3 )
print ( A )
   
-- 结果 --
A= [1, 2, 3, 4, 5, 6, 7, 8, 9] 右移3位后:
[7, 8, 9, 1, 2, 3, 4, 5, 6]
A= [1, 2, 3, 4, 5, 6, 7, 8, 9] 左移3位后:
[4, 5, 6, 7, 8, 9, 1, 2, 3]
百度空间 大漠飞雪那找到了,靠,真的很简单。。

from copy import deepcopy

a = [1, 2, 3, 4, 5]

def rightMove(arr, m):
	data = deepcopy(arr)
	flag = 0
	for i in range(len(arr)):
		if flag == 1:
			arr[i] = data[m]
			m = m + 1
		else:
			arr[i] = data[len(arr) - m]
			m = m - 1
			if m == 0:
				flag = 1

def leftMove(arr, m):
	data = deepcopy(arr)
	flag = 0
	for i in range(len(arr)):
		if flag == 1:
			arr[i] = data[m]
			m = m + 1
		else:
			arr[i] = data[m]
			m = m + 1
			if m == len(arr):
				m = 0
				flag = 1



#rightMove(a, 4)

leftMove(a, 2)

print a



顶部