
算法导论(第三版)
qq_36805550
这个作者很懒,什么都没留下…
展开
-
2.3.1归并排序
思路自底向上,层层合并,最后合并出最大的数组def guibing(li, start, end): if start == end: return mid = (start + end) // 2 guibing(li, start, mid) guibing(li, mid + 1, end) li1 = li[start:mid+1] + [10] li2 = li[mid +1:] + [10] i1 = 0 i2原创 2022-02-18 10:32:57 · 204 阅读 · 0 评论 -
2.2-2 选择排序
选择排序思路先从前n个数选出最小的,和li[0]交换,再从1 ~ n-1 中选出最小的和li[1]交换,直到结尾。代码li = [4,3,5,1,6,2]n = len(li)for i in range(n - 1): index = i tmp = li[index] for j in range(i + 1, n): if li[j] < tmp: tmp, index = li[j], j li[i], li[原创 2022-02-18 10:30:45 · 218 阅读 · 0 评论 -
2.1-4 考虑把两个n位2进制整数加起来的问题
题目描述考虑把两个n位2进制整数加起来的问题,这两个整数分别存储在两个n元数组A和B中,这两个整数的和应按二进制形式存储在一个(n+1)元数组C中。请给出该问题的形式化描述,并写出伪代码。形式化描述从第0位遍历到第n-1位,C的第i位为A与B第i位与进位相加对2取余,进位为A与B第i位与进位相加对2取整,由于A、B第n-1位为1,所以C的第n位为1代码a = []b = []n = len(a)c = [1] * (n + 1)jinwei = 0for i in range(n):原创 2022-02-17 16:40:56 · 573 阅读 · 0 评论 -
2.1-2重写插入排序,使之按非升序而不是非降序排序
li = [5, 2, 4, 6, 1, 3]n = len(li)for i in range(1, n): target = li[i] j = i - 1 while j >= 0 and li[j] < target: li[j], li[j+1] = li[j+1], li[j] j -= 1print(li)原创 2022-02-17 16:11:19 · 304 阅读 · 0 评论 -
2.1-1 说明插入排序在数组A=[31,41,59,26,41,58]上的执行过程
2.1-1 说明插入排序在数组A=[31,41,59,26,41,58]上的执行过程说明:加粗为有序,斜体为当前要插入的数,正常字体为待排序31,41,59,26,41,5831,41,59,26,41,5831,41,59,26,41,5826,31,41,59, 41,5826,31,41,41,59,5826,31,41,41,58,59...原创 2022-02-17 16:08:02 · 291 阅读 · 0 评论 -
2.1插入排序
插入排序思路:从后往前遍历,把新元素插在它该放在的地方,每次插之前,数组已经有序代码实现li = [5, 2, 4, 6, 1, 3]n = len(li)for i in range(1, n): target = li[i] j = i - 1 while j >= 0 and li[j] > target: li[j], li[j+1] = li[j+1], li[j] j -= 1print(li)...原创 2022-02-17 15:57:49 · 313 阅读 · 0 评论