• 简单算法


    二分查找

     1 # Author:AlwaysLive
     2 #!/usr/bin/env python
     3 #_*_ coding:utf-8 _*_
     4 
     5 
     6 print("算法总结")
     7 """
     8 递归
     9     1.调用自身
    10     2.结束条件
    11 """
    12 def func1(x):
    13     if x > 0:
    14         print(x)
    15         func1(x-1)
    16 
    17 
    18 """
    19 二分查找
    20     在有序的数列中,从中间位置断开,
    21     判断需要寻找的数字是在前半部分还是在后半部分
    22     直到找到需要的数据
    23 """
    24 def bin_search(data, value):
    25     low = 0
    26     high = len(data) - 1
    27     while low <= high:
    28         if low == high: # 如果只剩一个数字还没有匹配到的话,那么提示不存在
    29             return None
    30 
    31         mid = (low + high) // 2
    32         if data[mid] == value:
    33             return mid
    34         elif data[mid] < value:
    35             low = mid + 1
    36         else:
    37             high = mid
    38 
    39 
    40 # 现有一个学员信息列表(按id增序排列),格式为:
    41 
    42 def qus1():
    43     def bin_search(data, value):
    44         low = 0
    45         high = len(data) - 1
    46         while low <= high:
    47             if low == high: # 如果只剩一个数字还没有匹配到的话,那么提示不存在
    48                 return None
    49 
    50             mid = (low + high) // 2
    51             if data[mid]['id'] == value:
    52                 return mid
    53             elif data[mid]['id'] < value:
    54                 low = mid + 1
    55             else:
    56                 high = mid
    57 
    58 
    59     studentInfo = [
    60                     {'id':1001, 'name':"张三", 'age':20},
    61                     {'id':1002, 'name':"李四", 'age':25},
    62                     {'id':1004, 'name':"王五", 'age':23},
    63                     {'id':1007, 'name':"赵六", 'age':33}
    64     ]
    65 
    66     id = int(input("Please input student ID:"))
    67     resIdIndex = bin_search(studentInfo, id)
    68     print("ID:%s  姓名:%s  年龄:%s"%(studentInfo[resIdIndex]['id'], studentInfo[resIdIndex]['name'], studentInfo[resIdIndex]['age']))

    冒泡排序

     1 # Author:AlwaysLive
     2 #!/usr/bin/env python
     3 #_*_ coding:utf-8 _*_
     4 
     5 
     6 import random
     7 
     8 # 列表相邻的两个书比较大小,将大的放在后面的位置,如此循环
     9 li = []
    10 for i in range(1000):
    11     li.append(random.randint(0, 1000000))
    12 
    13 liLen = len(li)
    14 print(li)
    15 def bubble_sort(li):
    16     for i in range(liLen):
    17         for j in range(liLen - i - 1):
    18             if li[j] > li[j+1]:
    19                 li[j], li[j + 1] = li[j + 1], li[j]
    20 
    21 # 冒泡排序优化,如果一次到头没有发现需要调整顺序的话,就停止冒泡
    22 def bubble_sort_1(li):
    23     for i in range(len(li)):
    24         exchange = False
    25         for j in range(len(li) - i -1):
    26             if li[j] > li[j + 1]:
    27                 li[j], li[j+1] = li[j+1], li[j]
    28                 exchange = True
    29         if not exchange:
    30             break

    插入排序

     1 # Author:AlwaysLive
     2 #!/usr/bin/env python
     3 #_*_ coding:utf-8 _*_
     4 
     5 
     6 import random
     7 
     8 # 列表被分为有序区和无序区两个部分。最初有序区只有一个元素。
     9 # 每次从无序区选择一个元素,插入到有序区的位置,直到无序区变空。
    10 
    11 li = []
    12 for i in range(100):
    13     li.append(random.randint(0, 1000))
    14 print(li)
    15 
    16 def insert_sort(li):
    17    pass    正在研究。。。。
    18 insert_sort(li)
    19 print(li)

     选择排序

     1 # Author:AlwaysLive
     2 #!/usr/bin/env python
     3 #_*_ coding:utf-8 _*_
     4 
     5 
     6 import random
     7 
     8 # 循环列表,将列表中最小数值取出来,然后放到第一个位置
     9 li = []
    10 for i in range(100):
    11     li.append(random.randint(0, 1000))
    12 print(li)
    13 
    14 def select_sort(li):
    15     for i in range(len(li)):
    16         tmpNum = i
    17         for j in range(i + 1, len(li) - 1):
    18             if li[tmpNum] > li[j]:
    19                 tmpNum = j
    20         li[i], li[tmpNum] = li[tmpNum], li[i]
    21 select_sort(li)
    22 print(li)
  • 相关阅读:
    解决类似 /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found 的问题
    qemu vm setup network(ssh) with buildroot
    C: 当字符数组首指针转化成char *指针,sizeof(*ptr)不为array的size
    C 利用strtok, feof 截取字符串
    LINUX C: 获取本地指定网卡的IP地址
    C语言比较好的风格梳理
    perf-perf stat用户层代码分析
    内核调试-perf introduction
    内核调试-ftrace introduction
    【原创】VB6.0应用程序安装包的生成(Setup Factory 9.0制作安装包的方法)
  • 原文地址:https://www.cnblogs.com/alwaysInMe/p/6891070.html
Copyright © 2020-2023  润新知