首页 > 编程语言 > 详细

python 算法归类

时间:2020-12-15 19:52:16      阅读:21      评论:0      收藏:0      [点我收藏+]

1.斐波那契数列

def func(n):
    a = 0
    b = 1
    alist = []
    if n <= 2:
        alist.append(a)
        alist.append(b)
        return alist
    else:
        for i in range(n):
            alist.append(a)
            a, b = b, a + b
        return alist

2.二分法  

def func(alist, item):
    low = 0
    high = len(alist)-1
    print(type(low))
    n = 0  # 记录查询几次查到
    while low <= high: # 循环的次数小于或者等于high的时候停止循环
        mid = int((low + high)/2)
        n += 1   # 没查询一次  查询次数+1
        if alist[mid]==item:  #  比对中间值是否等于要查询的参数
            return mid         # 如果是 直接返回值
        if alist[mid]<item:  # 判断如果中间值小于要查询得数
            low = mid + 1   #那么循环开始的数low  就等于  中间值+1
        else:
            high = (mid-1)      # 如果大于  就把中间值数的下标-1  缩小查询范围
    return None  #如果什么都没有查到 返回None


print(func([1,2,33,4,58,9,11,12,19,18,89,20,28],28)) # 输出查询到的值

二分法 迭代查询

def fun(alist,item):
    if len(alist) == 0:
        return False
    else:
        mid = len(alist) // 2   #获取中间值的下标
        if item == alist[mid]:
            return True,item
        elif item < alist[mid]: # 如果查找的数小于中间值
            return fun(alist[:mid],item)    #从开头到中间值查询  [:mid]是中间值66往前得数
        else:
            return fun(alist[mid+1:],item) #   否则从中间值下一个数到结尾

# 输出返回的值
print(fun([1,  22,33,44,55,66,77,88,99],66))

3.等边三角形

for i in range(1,6):
    for j in range(1,6-i):
        print(" ",end="")
    for k in range(1,i+1):
        print("* ",end="")
    print("")

  等边三角形二

for i in range(1,6):
    for j in range(1,6-i):
        print(" ",end="")
    print("* "*i)

4.直角三角形

for i in range(6):
  i += 1
  for j in range(i):
    print(*, end=‘‘)#end=‘‘输出空格
  print()

5.冒泡排序

def func(alist):
    for x in range(1,len(alist)):
        for i in range(0,len(alist)-x):
            if alist[i] > alist[i+1]:
                alist[i], alist[i+1] = alist[i+1], alist[i]
    return alist
print(func([1,4,2,3,6,7,8,9,0,5]))

6.选择排序

def func(alist):
    for x in range(0,len(alist)):
        min_num = alist[x]
        for i in range(x+1,len(alist)):
            if alist[i] < min_num:
                alist[i], min_num = min_num, alist[i]
        alist[x] = min_num
    return alist
print(func([1,4,2,3,6,7,8,9,0,5]))

7.链表

class Node:
    def __init__(self, initdata):
        self.__data = initdata
        self.__next = None

    def getData(self):
        return self.__data

    def getNext(self):
        return self.__next

    def setData(self, newdata):
        self.__data = newdata

    def setNext(self, newnext):
        self.__next = newnext

class SinCycLinkedlist:
    def __init__(self):
        self.head = Node(None)
        self.head.setNext(self.head)

    def add(self, item):
        temp = Node(item)
        temp.setNext(self.head.getNext())
        self.head.setNext(temp)

    def remove(self, item):
        prev = self.head
        while prev.getNext() != self.head:
            cur = prev.getNext()
            if cur.getData() == item:
                prev.setNext(cur.getNext())
            prev = prev.getNext()

    def search(self, item):
        cur = self.head.getNext()
        while cur != self.head:
            if cur.getData() == item:
                return True
            cur = cur.getNext()

        return False

    def empty(self):
        return self.head.getNext() == self.head

    def size(self):
        count = 0
        cur = self.head.getNext()
        while cur != self.head:
            count += 1
            cur = cur.getNext()

        return count

if __name__ == __main__:
    s = SinCycLinkedlist()
    print(s.empty() == %s, s.size() == %s % (s.empty(), s.size()))

    s.add(19)
    s.add(86)
    print(s.empty() == %s, s.size() == %s % (s.empty(), s.size()))

    print(86 is%s in s % (‘‘ if s.search(86) else  not,))
    print(4 is%s in s % (‘‘ if s.search(4) else  not,))
    print(s.empty() == %s, s.size() == %s % (s.empty(), s.size()))

    s.remove(19)
    print(s.empty() == %s, s.size() == %s % (s.empty(), s.size()))

8.青蛙跳台阶:

  一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。

#! /usr/bin/env python
# -*- coding: utf-8 -*-
def quick(list):
    if len(list) < 2:
        return list

    tmp = list[0]  # 临时变量 可以取随机值
    left = [x for x in list[1:] if x <= tmp]  # 左列表
    right = [x for x in list[1:] if x > tmp]  # 右列表
    return quick(left) + [tmp] + quick(right)

li = [4,3,7,5,8,2]
print quick(li)  # [2, 3, 4, 5, 7, 8]

#### 对[4,3,7,5,8,2]排序
‘‘‘
[3, 2] + [4] + [7, 5, 8]                 # tmp = [4]
[2] + [3] + [4] + [7, 5, 8]              # tmp = [3] 此时对[3, 2]这个列表进行排序
[2] + [3] + [4] + [5] + [7] + [8]        # tmp = [7] 此时对[7, 5, 8]这个列表进行排序
‘‘‘

 

python 算法归类

原文:https://www.cnblogs.com/ktmd/p/14140475.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!