
数据结构与算法
一许流星
不要在该拼搏的时候选择安逸!
展开
-
python--Python list转为链表
代码即注释如下import sysimport jsonclass ListNode: """ 定义一个节点,包括value 和next指针,指向下一个node """ def __init__(self, x): self.val = x self.next = Nonedef stringToIntegerLis...原创 2020-03-13 17:27:56 · 2226 阅读 · 0 评论 -
算法的引入及简单介绍
算法的重要性:举一个可能不太恰当的例子:如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器。那么数据结构和算法是什么?答曰:兵法!我们可以不看兵法在战场上肉搏,如此,可能会胜利,可能会失败。即使胜利,可能也会付出巨大的代价。我们写程序亦然:没有看过数据结构和算法,有时面对问题可能会没有任何思路,不知如何下手去解决;大部分时间可能解决了问...原创 2018-09-09 21:36:16 · 621 阅读 · 0 评论 -
从简单的例子来看看 算法的到底能改变什么?
先来看一道题:如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合? 第一种写法:import timestart_time = time.time()for a in range(0, 1001): for b in range(0, 1001): for c in range(0, ...原创 2018-09-09 21:45:55 · 927 阅读 · 0 评论 -
用Python实现冒泡排序算法
1.冒泡排序算法原理# 冒泡排序要排序n个数(假设为升序排列), 由于每遍历一趟只排好一个数字 即把最大数排到最后# 则需要遍历n-1趟,所以最外层循环是要循环n-1次# 每完成一趟遍历后,下趟需要比较的数字就会减少一个# 所以第i趟需要比较的次数为len(list)-i-1,所以第二层循环要遍历是n-1-i次2.详细注释及代码如下:list = [7, 2, 5, 1...原创 2018-09-09 21:50:06 · 5291 阅读 · 2 评论 -
用Python实现二分查找算法
1.概念 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 2.查找过程 首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键...原创 2018-09-13 21:51:35 · 17625 阅读 · 6 评论 -
用Python实现快速排序(Quicksort)算法
1.快速排序(Quicksort)算法介绍快速排序(Quicksort)是对冒泡排序的一种改进,但是不是稳定的排序算法2.算法思想1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;2)以第一个数组元素作为关键数据,保存在key中,即key=A[0];3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],用A[j]覆盖A[0],4...原创 2018-10-14 11:47:10 · 10605 阅读 · 1 评论 -
用Python实现直接插入排序
1.直接插入排序 直接插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 2.算法步骤,如下图所示1)将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。2)从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元...原创 2018-10-22 19:09:53 · 3565 阅读 · 0 评论 -
用Python实现希尔排序
1.希尔排序算法思想 将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次将gap折半减小,循环上述操作;当gap=1时,利用直接插入,完成排序。2.实质希尔排序是基于插入排序的以下两点性质而提出改进方法的: 1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。 2.但插入排序一般来说是低效...原创 2018-11-11 22:10:29 · 759 阅读 · 2 评论