zoukankan      html  css  js  c++  java
  • python之常见算法

    1、冒泡排序

    冒泡排序比较常见,面试很多都会问到这个算法,其原理比较简单,代码实现也很简单

    # 冒泡排序
    # 先定一个一个需要排序的列表
    l = [7,2,3,1,4,5,6,9,8]
    # 统计一下长度
    n = len(l)
    ## 先遍历所有元素
    for i in range(len(l)):
        ## 最后还剩多少个元素需要对比排序,因为本身自己不需要排序,所以-1,之前已经拍过多少个数字了,还剩下多少就需要把i也减去
        for j in range(n-i-1):
            ## 对比,如果当前的数字比后面的数字大,则对换
            if l[j] > l[j+1]:
                l[j],l[j+1] = l[j+1],l[j]
    print(l)

    结果为:


    2、二分算法
    二分算法是比较常见的一种算法,也是面试里面比较常问的一种算法,代码如下。

    def erfen(list1,num):
        headIndex = 0       ## 首索引
        endIndex = len(list1)-1         ## 结尾索引
        count = 0          ## 计数用
        while headIndex <= endIndex:       ## 循环查找
              midIndex = (headIndex+endIndex)//2    ## 每次重新赋值中间索引
              count +=1
              #if len(list1)%2 == 0:
              if num == list1[midIndex]:         ## 判断是否找到
                  print(f'查找 {num} 共计执行 {count} 次')
                  return num
              if num > list1[midIndex]:          ## 如果目标数字比中间索引的数值大,首索引则赋值为中间索引加一,加一是为了处理最后一个位置的数值
                  headIndex = midIndex +1
              if num < list1[midIndex]:          ## 如果目标数字比中间索引的数值小,末尾索引则赋值为中间索引减一,减一是为了处理开头位置的数值
                  endIndex = midIndex  -1
        else:
            print('没有找到这个数字')
            
    ## 这里测试一下
    l = [1,2,3,4,5,6,7,8,9,10]
    for i in range(1,11):
        erfen(l,i)

    结果如下:

  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/dflblog/p/11357925.html
Copyright © 2011-2022 走看看