随笔分类 -  算法与数据结构

摘要:采用分治法: 分割:递归地把当前序列平均分割成两半。 集成:在保持元素顺序的同时将上一步得到的子序列集成到一起(归并)。 归并操作(归并算法),指的是将两个已经排序的序列合并成一个序列的操作。归并排序算法依赖归并操作。 递归法(Top-down) 1.申请空间,使其大小为两个已经排序序列之和,该空间 阅读全文
posted @ 2019-11-15 12:10 pycoder_hsz 阅读(1463) 评论(0) 推荐(0)
摘要:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序。 快速排序算法的工作原理如下: 1. 从数列中挑出一个元素,称为"基准"(pivot)。 2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比 阅读全文
posted @ 2019-10-14 20:37 pycoder_hsz 阅读(1114) 评论(0) 推荐(0)
摘要:插入排序的工作原理如下: (1)从数组第一个元素开始(0下标),从该元素开始进行构建有序序列; (2)取出待排序列中第一个元素,然后从“有序”序列中,从后往前扫描; (3)如果该元素(有序序列)大于待插入元素(待排序列),将该元素后移一个位置; (4)重复步骤3,直到找到“有序序列”中某一元素小于或 阅读全文
posted @ 2019-10-07 16:30 pycoder_hsz 阅读(642) 评论(0) 推荐(0)
摘要:选择排序算法的工作原理如下: 1. 首先在序列中找到最小或最大元素,存放到排序序列的前或后。 2. 然后,再从剩余元素中继续寻找最小或最大元素。 3. 然后放到已排序序列的末尾。 4. 以此类推,直到所有元素均排序完毕。 例子图步骤如下: 阅读全文
posted @ 2019-10-06 15:55 pycoder_hsz 阅读(387) 评论(0) 推荐(0)
摘要:冒泡排序算法的工作原理如下: 1. 比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。 2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 3. 除了最后一个,所有的元素重复以上的步骤。 4. 持续每次对越来越少的元素重复上面的步骤,直 阅读全文
posted @ 2019-10-05 21:41 pycoder_hsz 阅读(520) 评论(0) 推荐(0)
摘要:队列(queue),是一种操作受限的线性表。只允许在队列的一端添加元素,在队列的另一端删除元素。能添加元素的一端称为队尾,能删除元素的一端称为队头。 队列最大的特性是:先进先出(FIFO,first in first out) 下面为普通队列的python实现: 打印结果为: 其他类型待续。。。 阅读全文
posted @ 2019-10-04 20:15 pycoder_hsz 阅读(322) 评论(0) 推荐(0)
摘要:栈,又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为 阅读全文
posted @ 2019-06-10 15:16 pycoder_hsz 阅读(483) 评论(0) 推荐(0)
摘要:一.什么是顺序表 在程序中,经常需要将一组(通常为同一个类型的)数据元素作为整体管理和使用,需要创建这种元素组,用变量记录它们,传进传出函数等(例如,Python中的列表)。一组数据中包含的元素个数可能发生变化(可以增加或者删除元素)。 对于元素增删改查的需求,最简单的解决办法就是将这一组元素当做一 阅读全文
posted @ 2019-05-03 19:51 pycoder_hsz 阅读(433) 评论(0) 推荐(0)
摘要:一.算法的起始 1.第一次尝试 如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? (可以考虑到百钱白鸡) 枚举法 # 注意是三重循环 import time start_time = time.time() for a in rang 阅读全文
posted @ 2019-04-20 18:24 pycoder_hsz 阅读(520) 评论(0) 推荐(0)