zoukankan      html  css  js  c++  java
  • python基本算法

    1.冒泡排序

    data_set = [ 9,1,22,31,45,3,6,2,11 ]
     
    loop_count = 0
    for j in range(len(data_set)):
        for i in range(len(data_set) - j- 1): # -1 是因为每次比对的都 是i 与i +1,不减1的话,最后一次对比会超出list 获取范围,-j是因为,每一次大loop就代表排序好了一个最大值,放在了列表最后面,下次loop就不用再运算已经排序好了的值 了
            if data_set[i] > data_set[i+1]: #switch
                tmp = data_set[i]
                data_set[i] = data_set[i+1]
                data_set[i+1] = tmp
            loop_count +=1
        print(data_set)
    print(data_set)
    print("loop times", loop_count)
    [1, 9, 22, 31, 3, 6, 2, 11, 45]
    [1, 9, 22, 3, 6, 2, 11, 31, 45]
    [1, 9, 3, 6, 2, 11, 22, 31, 45]
    [1, 3, 6, 2, 9, 11, 22, 31, 45]
    [1, 3, 2, 6, 9, 11, 22, 31, 45]
    [1, 2, 3, 6, 9, 11, 22, 31, 45]
    [1, 2, 3, 6, 9, 11, 22, 31, 45]
    [1, 2, 3, 6, 9, 11, 22, 31, 45]
    [1, 2, 3, 6, 9, 11, 22, 31, 45]
    [1, 2, 3, 6, 9, 11, 22, 31, 45]
    loop times: 36
    结果

    2.选择排序

    data_set = [ 9,1,22,31,45,3,6,2,11 ]
     
    smallest_num_index = 0 #初始列表最小值,默认为第一个
     
    loop_count = 0
    for j in range(len(data_set)):
        for i in range(j,len(data_set)):
            if data_set[i] < data_set[smallest_num_index]: #当前值 比之前选出来的最小值 还要小,那就把它换成最小值
                smallest_num_index = i
            loop_count +=1
        else:
            print("smallest num is ",data_set[smallest_num_index])
            tmp = data_set[smallest_num_index]
            data_set[smallest_num_index] =  data_set[j]
            data_set[j] = tmp
     
        print(data_set)
        print("loop times", loop_count)
    ('smallest num is ', 1)
    [1, 9, 22, 31, 45, 3, 6, 2, 11]
    ('loop times', 9)
    ('smallest num is ', 2)
    [1, 2, 22, 31, 45, 3, 6, 9, 11]
    ('loop times', 17)
    ('smallest num is ', 3)
    [1, 2, 3, 31, 45, 22, 6, 9, 11]
    ('loop times', 24)
    ('smallest num is ', 6)
    [1, 2, 3, 6, 45, 22, 31, 9, 11]
    ('loop times', 30)
    ('smallest num is ', 9)
    [1, 2, 3, 6, 9, 22, 31, 45, 11]
    ('loop times', 35)
    ('smallest num is ', 11)
    [1, 2, 3, 6, 9, 11, 31, 45, 22]
    ('loop times', 39)
    ('smallest num is ', 22)
    [1, 2, 3, 6, 9, 11, 22, 45, 31]
    ('loop times', 42)
    ('smallest num is ', 31)
    [1, 2, 3, 6, 9, 11, 22, 31, 45]
    ('loop times', 44)
    ('smallest num is ', 45)
    [1, 2, 3, 6, 9, 11, 22, 31, 45]
    ('loop times', 45)
    结果

    3.快速排序

    def quick_sort(array, left, right):
        '''
    
        :param array:
        :param left: 列表的第一个索引
        :param right: 列表最后一个元素的索引
        :return:
        '''
        if left >= right:
            return
        low = left
        high = right
        key = array[low]  # 第一个值
        sum=0
        while low < high:  # 只要左右未遇见
            while low < high and array[high] > key:  # 找到列表右边比key大的值 为止
                high -= 1
                sum+=1
                print array[high]
            print "high第一次:",high
            print "sum:",sum
            # 此时直接 把key(array[low]) 跟 比它大的array[high]进行交换
            array[low] = array[high]
            array[high] = key
    
            while low < high and array[low] <= key:  # 找到key左边比key大的值,这里为何是<=而不是<呢?你要思考。。。
                low += 1
                # array[low] =
            print "low:",low
            # 找到了左边比k大的值 ,把array[high](此时应该刚存成了key) 跟这个比key大的array[low]进行调换
            array[high] = array[low]
            array[low] = key
            print "high:",high
            print  array
        quick_sort(array, left, low - 1)  # 最后用同样的方式对分出来的左边的小组进行同上的做法
        quick_sort(array, low + 1, right)  # 用同样的方式对分出来的右边的小组进行同上的做法
        print "=========================="
    
    if __name__ == '__main__':
      #  array = [96, 14, 10, 9, 6, 99, 16, 5, 1, 3, 2, 4, 1, 13, 26, 18, 2, 45, 34, 23, 1, 7, 3, 22, 19, 2]
        # array = [8,4,1, 14, 6, 2, 3, 9,5, 13, 7,1, 8,10, 12]
        array=[6,2,7,3,8,9]
        print("before sort:", array)
        quick_sort(array, 0, len(array) - 1)
    
        print("-------final -------")
        print(array)
    ('before sort:', [6, 2, 7, 3, 8, 9])
    8
    3
    high第一次: 3
    sum: 2
    low: 2
    high: 3
    [3, 2, 6, 7, 8, 9]
    6
    high第一次: 2
    sum: 3
    low: 2
    high: 2
    [3, 2, 6, 7, 8, 9]
    high第一次: 1
    sum: 0
    low: 1
    high: 1
    [2, 3, 6, 7, 8, 9]
    ==========================
    8
    7
    high第一次: 3
    sum: 2
    low: 3
    high: 3
    [2, 3, 6, 7, 8, 9]
    8
    high第一次: 4
    sum: 1
    low: 4
    high: 4
    [2, 3, 6, 7, 8, 9]
    ==========================
    ==========================
    ==========================
    -------final -------
    [2, 3, 6, 7, 8, 9]
    结果

    4.二叉树

    class TreeNode(object):
        def __init__(self, data=0, left=0, right=0):
            self.data = data
            self.left = left
            self.right = right
    
    
    class BTree(object):
        def __init__(self, root=0):
            self.root = root
    
        def preOrder(self, treenode):
            if treenode is 0:
                return
            print(treenode.data)
            self.preOrder(treenode.left)
            self.preOrder(treenode.right)
    
        def inOrder(self, treenode):
            if treenode is 0:
                return
            self.inOrder(treenode.left)
            print(treenode.data)
            self.inOrder(treenode.right)
    
        def postOrder(self, treenode):
            if treenode is 0:
                return
            self.postOrder(treenode.left)
            self.postOrder(treenode.right)
            print(treenode.data)
    
    
    if __name__ == '__main__':
        n1 = TreeNode(data=1)
        n2 = TreeNode(2, n1, 0)
        n3 = TreeNode(3)
        n4 = TreeNode(4)
        n5 = TreeNode(5, n3, n4)
        n6 = TreeNode(6, n2, n5)
        n7 = TreeNode(7, n6, 0)
        n8 = TreeNode(8)
        root = TreeNode('root', n7, n8)
    
        bt = BTree(root)
        print("preOrder".center(50, '-'))
        print(bt.preOrder(bt.root))
    
        print("inOrder".center(50, '-'))
        print (bt.inOrder(bt.root))
    
        print("postOrder".center(50, '-'))
        print (bt.postOrder(bt.root))
    ---------------------preOrder---------------------
    root
    7
    6
    2
    1
    5
    3
    4
    8
    None
    ---------------------inOrder----------------------
    1
    2
    6
    3
    5
    4
    7
    root
    8
    None
    --------------------postOrder---------------------
    1
    2
    3
    4
    5
    6
    7
    8
    root
    None
    结果
  • 相关阅读:
    TDH-hbase shell 常用命令
    WebService之基于REST机制的实现实例(Java版)
    大牛地址
    Solr的SolrCloud与Master-slave主从模式对比
    solr亿万级索引优化实践-自动生成UUID
    Solr查询中涉及到的Cache使用及相关的实现【转】
    05-spectral 图机器学习之谱分解
    03-motifs 图机器学习之motif和结构角色
    04-communities 图机器学习之社区
    02-gnp-smallworld 图机器学习之最小世界
  • 原文地址:https://www.cnblogs.com/weixx1111/p/8360051.html
Copyright © 2011-2022 走看看