常用简单算法

1、冒泡算法

遍历数组,两两进行比较,元素大的和小的进行交换,一次可以出一个最大值或最小值,O(n²)

nums = [1,2,3,4,5,6,7,8,9]
length = len(nums)

for i in range(length):
    flag = False  # 假定没有达到目标顺序
    for j in range(length-1-i):
        if nums[j] > nums[j+1]:
            nums[j], nums[j+1] = nums[j+1], nums[j]
            flag = True  # 说明进行交换过,两两进行比较的时候出现了顺序不对i的情况
    if not flag:
        break

2、简单选择排序与二元选择排序

寻找最大或最小值,依次比较,然后交换,每一次出一个会两个值,减少了交换次数,提高了效率,性能略好于冒泡

nums = list(range(10))
import random
random.shuffle(nums)
length = len(nums)

for  i in range(length):
    maxindex = i
    for j in range(maxindex+1, length):
        if nums[j] > nums[maxindex]:
            maxindex = j
         
        if maxindex != i:
            nums[i], nums[maxindex] = nums[maxindex], nums[i]
length = len(nums)

for i in range(length//2):  # 总共需要循环次数
    maxindex = i
    minindex = -1-i
    minorigin = length + minindex

    for j in range(maxindex+1, length-i):  # 一次固定两个值
        if nums[j] > nums[maxindex]:
            maxindex = j
        if nums[-j-1] < nums[mimindex]:
            minindex = -j-1
    else:
        minindex = length + minindex  # 将负索引调整为正索引
    
    if maxindex != i:
        nums[i], nums[maxindex] = nums[maxindex], nums[i]
        if minindex == i:
            minindex = maxindex  # 修正索引
     
    if minindex != miorgin and nums[minindex] != nums[minorigin]:
        nums[minorigin], nums[minindex] = nums[minindex], nums[minorigin] 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值