剑指offer21:调整数组顺序使奇数位于偶数前面

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

#方法1:时间复杂度o(n)  空间复杂度o(n)
def oddevenorder(alist):
    if not alist:
        return None
    if len(alist)==1:
        return alist
    odd=[]
    even=[]
    for i in alist:
        if i % 2==1:
            odd.append(i)
        else:
            even.append(i)
    return odd+even
alist=[1,2,3,4]
oddevenorder(alist)

 

 

#方法2:o(n**2)  遇到偶数 先提出来,后面的往前挪动一位,偶数补到后面
def oddevenorder(alist):
    if not alist:
        return None
    if len(alist)==1:
        return alist
    for i in alist:
        if i %2 == 0:
            alist.pop(alist.index(i))
            alist.append(i)
    return  alist
alist=[1,2,3,4]
oddevenorder(alist)
#方法3:o(nlogn)  
def oddevenorder(alist):
    if not alist:
        return None
    if len(alist)==1:
        return alist
    left=0
    right=len(alist)-1
    while left<right:
        while left<right and alist[left]%2!=0:
            left += 1
        while left<right and alist[right]%2==0:
            right -= 1  
        tmp=alist[left]
        alist[left]=alist[right]
        alist[right]=tmp
    return alist
    
    
    
alist=[1,-2,3,4]
oddevenorder(alist)

 

def oddevenorder(alist,func):
    if not alist:
        return None
    if len(alist)==1:
        return alist
    left=0
    right=len(alist)-1
    while left<right:
#         while left<right and alist[left]%2!=0:
        while left<right and not func(alist[left]):
            left += 1
        while left<right and func(alist[right]):
            right -= 1  
        tmp=alist[left]
        alist[left]=alist[right]
        alist[right]=tmp
    return alist
def  is_even(n):
    #负数放在非负数前面
    return n>=0
    
    
    
alist=[1,-2,3,4]
oddevenorder(alist,is_even)

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值