数据结构与算法
fan_fan_feng
keep study
展开
-
排序算法之堆排序
堆排序是一种树形选择排序,是对直接选择排序的有效改进。基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最小项(小顶堆)。 若以一维数组存储一个堆,则堆对应一棵完全二叉树...转载 2018-03-08 14:40:26 · 864 阅读 · 0 评论 -
排序算法之快速排序
快速排序(Quick Sort)基本思想:1)选择一个基准元素,通常选择第一个元素或者最后一个元素,2)通过一趟排序讲待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素值小。另一部分记录的 元素值比基准值大。3)此时基准元素在其排好序后的正确位置4)然后分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序。快速排序的示例:(a)一趟排序的过程:(b)排序的全过程算法的实现:...转载 2018-03-08 15:35:16 · 182 阅读 · 0 评论 -
排序算法之归并排序
基本思想:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。归并排序示例: 排序演示:合并方法:设r[i…n]由两个有序子表r[i…m]和r[m+1…n]组成,两个子表长度分别为n-i +1、n-m。j=m+1;k=i;i=i; //置两个子表的起始下标及辅助数组的起始下标若i>...转载 2018-03-09 11:38:20 · 159 阅读 · 0 评论 -
排序算法之希尔排序
希尔排序 ShellSort介绍:希尔排序,也称递减增量排序算法,实质是分组插入排序。由 Donald Shell 于1959年提出。希尔排序是非稳定排序算法。希尔排序的基本思想是:将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序。例如,假设有这样一组...转载 2018-03-09 14:36:50 · 157 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序 BubbleSort介绍:冒泡排序的原理非常简单,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。步骤:比较相邻的元素。如果第一个比第二个大,就交换他们两个。对第0个到第n-1个数据做同样的工作。这时,最大的数就“浮”到了数组最后的位置上。针对所有的元素重复以上的步骤,除了最后一个。持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。源...转载 2018-03-09 15:06:45 · 133 阅读 · 0 评论 -
排序算法之选择排序
选择排序 SelectionSort介绍:选择排序无疑是最简单直观的排序。它的工作原理如下。步骤:在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。源代码:(python实现)def select_sort(ary): n = len(ary) for i in range...转载 2018-03-09 15:58:42 · 110 阅读 · 0 评论 -
排序算法之插入排序
插入排序 InsertionSort介绍:插入排序的工作原理是,对于每个未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。步骤:从第一个元素开始,该元素可以认为已经被排序取出下一个元素,在已经排序的元素序列中从后向前扫描如果被扫描的元素(已排序)大于新元素,将该元素后移一位重复步骤3,直到找到已排序的元素小于或者等于新元素的位置将新元素插入到该位置后重复步骤2~5排序演示:源代码:(py...转载 2018-03-09 16:01:48 · 104 阅读 · 0 评论 -
python实现二叉树和它的七种遍历
介绍:树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树、FP-树。另外可以用来提高编码效率,如哈弗曼树。 代码:用python实现树的构造和几种遍历算法,虽然不难,不过还是把代码作了一下整理总结。实现功能:树的构造递归实现先序遍历、中序遍历、后序遍历堆栈实现先序遍历、中序遍历、后序遍历队列实现层次遍历#coding=utf-8class N...转载 2018-03-12 20:19:34 · 140 阅读 · 0 评论