随机数生成、数组排序

1、随机数生成

添加链接描述
给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即:使用函数rand5()来实现函数rand7())

现在给两个生成随机数的函数Randa, Randb。Randa和Randb分别产生1到a的随机数和1到b的随机数,a,b不相等 (相等就没必要做转换了)。现在让你用Randa实现Randb。

1、如果a > b,进入步骤2;否则构造Randa2 = a * (Randa - 1) + Randa, 表示生成1到a2 随机数的函数。如果a2 仍小于b,继教构造 Randa3 = a * (Randa2 - 1) + Randa…直到ak >
b,这时我们得到Randak , 我们记为RandA。
2、步骤1中我们得到了RandA(可能是Randa或Randak ),其中A > b, 我们用下述代码构造Randb:

def roundb():
    x  = roundA()
    while x>b*(A//b):
        x = roundA()
    return x%b+1

2、数组排序

奇数在前偶数在后
输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。

方法一
类似于快速排序的思想,设两个指针从两边开始寻找。但不能保证相对顺序(即奇数和奇数,偶数和偶数之间的相对位置不变)

def f(nums):
    left = 0
    right= len(nums)-1
    while left<right:
        while nums[right] & 1 == 0:
            right -=1
        while nums[left] &1 ==1:
            left+=1
        if left <right:
             nums[left],nums[right] = nums[right],nums[left]
    return nums

方法二

插入排序的思想 能保证相对顺序,即奇数和奇数,偶数和偶数之间的相对位置不变
1、题目要求是“调整数组中数字的顺序”,即需要在原有数组上进行操作。
2、定义两个int型变量divP和searchP,divP指向左半段已经排好序的“前奇后偶”数组中最后一个奇数的位置;searchP始终位于divP的右边,指向数组右半段中出现的第一个奇数的位置。
3、定位searchP之后,依次与区间array[divP,searchP]之间的数值进行交换

def reOrderArray( array):
    divP = 0
    for i in range(len(array)):
        if array[i]%2 == 1:
            searchP = i
            while searchP > divP+1:
                array[searchP],array[searchP-1] = array[searchP-1],array[searchP]
                searchP -= 1
            divP += 1
    print(array)
    return array
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值