摘要:
可迭代对象 以直接作用于 for 循环的数据类型有以下几种: 一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等; 一类是 generator ,包括生成器和带 yield 的generator function。 这些可以直接作用于 for 循环的对象统称为 阅读全文
摘要:
什么是闭包 #定义一个函数 def test(number): #在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为闭包 def test_in(number_in): print("in test_in 函数, number_in is %d"%nu 阅读全文
摘要:
概述 可以参看之前的文章: 排序算法之计数排序 桶排序就不上代码了, 计数排序和基数排序都是桶排序,基数排序我没有写,其实和基数排序的思想一脉相承,有兴趣的可以看看,写计数排序主要为了帮助理解桶排序的思想。 简单说, 在排序时, 根据数据的范围准备不同的N个桶, 遍历整个序列, 将数据放到不同的各自 阅读全文
摘要:
概述 简单的来说, 归并就是将两个有序数列合并成一个有序数列. 归并排序就是利用归并的思想, 对待排序数组分成若干个长度为1的子数列, 然后将长度为1的数列进行两两合并, 得到若干个长度为2的有序数列, 在两两合并,得到长度为4的数列, 以此类推, 知道合并为1以数列, 结果就是排序好的数组. 其步 阅读全文
摘要:
概述 简单来说, 计数排序就是申请一个相同数据范围的数组空间, 计算每个数字各有几个,如此即可. 如一个数组为: [5, 2, 3, 4, 6, 3, 1, 0] 申请一个长度为6的数组(因为数组范围为0-5), 其中的值为: [1, 1, 1, 2, 1, 1, 1] 其数组意思就是, 0有1个, 阅读全文
摘要:
概述 介绍堆排序之前, 要先介绍什么是堆以及最大堆最小堆 什么是堆 这里的堆指的不是堆栈中的堆, 而是一种数据结构. 堆可以视为一棵完全的二叉树,完全二叉树的一个"优秀"的性质是,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素, 如下所示: 最大堆 最大堆 阅读全文
摘要:
概述 希尔排序是插入排序的一种更高效的改进版本. 希尔排序的基本思想是: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止 就是将插入排序分组一下 分组排序步骤如下: 选定一个增量, 即 阅读全文
摘要:
概述 冒泡排序是一种简单的排序算法. 它重复的走过要排序的数列, 每次比较相邻的两个元素, 若它们的顺序错误就把他们进行交换, 如此循环进行, 直到冒泡到最后一个元素或本次比较不需要进行冒泡 就结束. 因为元素就像一个一个向上冒, 故而叫做冒泡算法, 个人理解. 冒泡排序的执行步骤如下(从小到大): 阅读全文
摘要:
概述 快速排序算法是基于交换的高效排序算法, 采用了分治的思想. 其基本思想如下: 从数列中取出一个数作为基准数 将数组进行划分, 将比基准数大的元素移至右侧, 比基准数小的元素移至左侧 对左右的子区间重复进行排序, 直至每个子区间只有一个元素 其时间空间复杂度如下: 快速排序就是将小的放左边, 大 阅读全文
摘要:
概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差. 它的插入和删除操作比ArrayList更加高效, 但还是要遍历部分链表的指针才能移动到下标所指的 阅读全文