Loading

摘要: # 选择排序对冒泡排序进行了改进,保留了其基本的多趟比对思路,每趟都使当前最大项就位 # 但选择排序对交换进行了削减,相比起冒泡排序进行多次交换,每趟仅进行1次交换,记录最大项的所在位置,最后再跟本趟最后一项交换 # 选择排序的时间复杂度比冒泡排序稍优 # 比对次数不变,还是O(n2) # 交换次数 阅读全文
posted @ 2020-11-13 13:04 lotuslaw 阅读(70) 评论(0) 推荐(0) 编辑
摘要: # 通过监测每趟比对是否发生过交换,可以提前确定排序是否完成 # 如果某趟比对没有发生任何交换,说明列表已经排好序,可以提前结束算法 def shortBubbleSort(alist): exchanges = True passnum = len(alist) - 1 while passnum 阅读全文
posted @ 2020-11-13 13:03 lotuslaw 阅读(70) 评论(0) 推荐(0) 编辑
摘要: # 冒泡排序的算法思路在于对无序表进行多趟比较交换, # 每趟包括了多次两两相邻比较,并将逆序的数据项互换位置,最终能将本趟的最大项就位 # 经过n-1趟比较交换,实现整表排序 # 比对的时间复杂度是O(N**2) # 关于交换次数,时间复杂度是O(N**2) # 冒泡排序通常作为时间效率较差的排序 阅读全文
posted @ 2020-11-13 12:58 lotuslaw 阅读(73) 评论(0) 推荐(0) 编辑
摘要: # 由于二分查找,每次比对都将下一步的比对范围缩小一半,n次比对后剩余数据n/2**i,求出i=log2(N) def binarySearch(alist, item): if len(alist) == 0: return False else: midpoint = len(alist) // 阅读全文
posted @ 2020-11-13 12:57 lotuslaw 阅读(315) 评论(0) 推荐(0) 编辑
摘要: # 通过控制列表索引达到二分的目的 # 算法时间复杂度O(log(N)) def binarySearch(alist, item): first = 0 last = len(alist) - 1 found = False while first <= last and not found: m 阅读全文
posted @ 2020-11-13 12:52 lotuslaw 阅读(249) 评论(0) 推荐(0) 编辑
摘要: # 算法时间复杂度O(N) def orderedSequentialSearch(alist, item): pos = 0 found = False stop = False while pos < len(alist) and not found and not stop: if alist 阅读全文
posted @ 2020-11-13 12:50 lotuslaw 阅读(197) 评论(0) 推荐(0) 编辑
摘要: # 算法时间复杂度O(N) def sequentialSearch(alist, item): pos = 0 found = False while pos < len(alist) and not found: if alist[pos] == item: found = True else: 阅读全文
posted @ 2020-11-13 12:49 lotuslaw 阅读(298) 评论(0) 推荐(0) 编辑
摘要: # 递归是从后向前递归调用,相当于是倒算 # 而动态规划是从前向后计算,每一步计算利用的都是前面已经计算完成的值,不存在调用自身的问题 # 动态规划突破了递归的层数限制 import time def fibonacci_v3(n, record): for i in range(1, n+1): 阅读全文
posted @ 2020-11-13 12:43 lotuslaw 阅读(288) 评论(0) 推荐(0) 编辑
摘要: # 递归调用是函数调用自己,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用, # 栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导 # 致栈溢出。大多数编程语言没有针对尾递归做优化,Python解释器也没有做 阅读全文
posted @ 2020-11-13 12:42 lotuslaw 阅读(260) 评论(0) 推荐(0) 编辑
摘要: # 递归算法三定律: # 递归算法必须具备基本结束条件 # 递归算法必须要减小规模,改变状态,向基本结束条件演进 # 递归算法必须要调用自身 import time def fibonacci_v1(n): if n == 1: return 0 elif n == 2: return 1 else 阅读全文
posted @ 2020-11-13 12:40 lotuslaw 阅读(636) 评论(0) 推荐(0) 编辑