算法
二叉树的遍历
若以 D、L、R分别表示根结点、左子树、右子树,理论上来说,二叉树的遍历方式有六种,但如果限定先左后右,则只有三种遍历方式:DLR(先序遍历)、LDR(中序遍历)、LRD(后续遍历)。另外,还有一种特殊的遍历方式:层次遍历 A
希尔排序
希尔排序是对插入排序的优化。 插入排序在数据集”基本有序“时,效率最高,因此,希尔排序的优化思路便是先把数据集变成”基本有序“, 再进行插入排序。 那么如何变成”基本有序“? 1、对列表按一定的间隔(gap)进行分组,公式:gap = length
插入排序
插入排序: 类似于打扑克 把列表[0]当作一个有序数列,将第2个数插入到序列中正确的位置, 把列表[0, 1]当作一个有序数列,将第3个数插入到序列中正确的位置 ...时间复杂度:O(n^2)剖析:插入到某个位置(index),就说明[ind
选择排序
选择排序: 遍历列表,找出最小的那个数, 和初始位置调换顺序 时间复杂度:O(n^2)迭代实现:def select_sort_iteration(datas): length = len(datas) for i in range(0, length -
冒泡排序
冒泡排序: 比较第1个数和第2数,如果第1个数大于第2个数,则调换他们的顺,即把更大的数放在后面, 对 第2个数 和第3数,重复此操作..., 最后,整个列表中最大的数就被换到了最后一个位置, 把数值从低位慢慢到高位的过程,比喻成冒泡。
时间复杂度[转]
关于代码的基本操作执行次数,我们用四个生活中的场景,来做一下比喻:场景1:给小灰一条长10寸的面包,小灰每3天吃掉1寸,那么吃掉整个面包需要几天? 答案自然是 3 X 10 = 30天。 如果面包的长度是 N 寸呢? 此时吃掉整个面包,需要
两数之和(twoSum)
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例: 给定 nums = [2, 7, 11, 15], target
快速排序
快速排序:通过基准数,把小于它的数放在它的左边,大于它的放在它的右边。也可以称为“挖坑转移”排序:1、坑的理解对于需要进行排序的列表,我们假设在地上有n个连续的坑,每个坑中都放了一个数字,我们需要把数字调整成从小到大的顺序2、挖坑(找基准数)的理解从这些坑中,选出一个基准数,就相当于从坑中挖出数字,