
数据结构与算法
文章平均质量分 71
xiaoping8411
一个走在路上的人,前面有太多太多的路。一个为了学习与生活,要不停奔走的人。
展开
-
排序算法概述
所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。 排序大概分为四类: 交换排序:包括冒泡排序,快速排序。 选择排序:包括直接选择排序,堆排序。 插入排序:包括直接插入排序,希尔排序。 合并排序:合并排序。 评估排序算法的原创 2012-06-30 10:49:34 · 912 阅读 · 0 评论 -
排序算法整理之归并排序
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。 归并操作的过程如下: 1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置 3. 比较两原创 2012-06-30 11:38:29 · 1002 阅读 · 0 评论 -
排序算法整理之希尔排序
希尔排序,也称递减增量排序算法,是插入排序的一种高速而稳定的改进版本。希尔排序是基于插入排序的以下两点性质而提出改进方法的: l 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率,如果当数据是”5, 4, 3, 2, 1“的时候,此时将“无序块”中的记录插入到“有序块”时,每次插入都要移动位置,此时插入排序的效率及其低下。 l 但插入排序一般原创 2012-06-30 11:35:22 · 860 阅读 · 0 评论 -
查找算法之哈希查找
哈希查找是通过计算数据元素的存储地址进行查找的一种方法。O(1)的查找,即所谓的秒杀。哈希查找的本质是先将数据映射成它的哈希值。哈希查找的核心是构造一个哈希函数,它将原来直观、整洁的数据映射为看上去似乎是随机的一些整数。 哈希查找的操作步骤: 1) 用给定的哈希函数构造哈希表; 2) 根据选择的冲突处理方法解决地址冲突; 3) 在哈希表的基础上执行哈希查原创 2012-07-01 11:56:12 · 45630 阅读 · 6 评论 -
排序算法整理之选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾(目前已被排序的序列)。以此类推,直到所有元素均排序完毕。 如图: 第一步: 我们拿80作为参照物(base),在80后面找到一个最小数20,然后将80跟20交换。 第二步:第一位原创 2012-06-30 11:10:44 · 854 阅读 · 2 评论 -
查找算法之二分查找
【基本思想是】:首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。 【算法复杂度】:假设其数组长度为n,其算法复杂度为o(log(n)) 【二分查找要求】原创 2012-07-01 11:54:38 · 1806 阅读 · 0 评论 -
查找算法之顺序查找
基本思想是:从表的一端开始,顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。 顺序查找的优点: 算法简单,且对表的结构无任何要求,无论是用向量还是用链表来存放结点,也无论结点之间是否按关键字有序,它都同样适用。 顺序查找的缺点: 查找效率低,因此,当n较大时不宜采用顺原创 2012-07-01 11:53:15 · 4217 阅读 · 0 评论 -
排序算法整理之插入排序
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 一般来说,插入排序都采用in-place在数原创 2012-06-30 11:28:04 · 956 阅读 · 0 评论 -
排序算法整理之堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆排序的过程是: 1. 建立一个堆 2. 把堆首(最大值)和堆尾互换 3. 把堆的尺寸缩小1,目的是把新的数组顶端数据调整到相应位置 4. 重复步骤2,直到堆原创 2012-06-30 11:20:01 · 1024 阅读 · 0 评论 -
排序算法整理之快速排序
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。 步骤为: 1. 从数原创 2012-06-30 10:59:19 · 904 阅读 · 0 评论 -
排序算法整理之冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 冒泡排序算法的运作如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一原创 2012-06-30 10:56:02 · 909 阅读 · 1 评论 -
查找算法整理之索引查找
索引查找是在索引表和主表(即线性表的索引存储结构)上进行的查找。 索引查找的过程是: 1) 首先根据给定的索引值K1,在索引表上查找出索引值等于KI的索引项,以确定对应予表在主表中的开始位置和长度, 2) 然后再根据给定的关键字K2,茬对应的子表中查找出关键字等于K2的元素(结点)。对索引表或子表进行查找时,若表是顺序存储的有序表,则既可进行顺序查找,也可进行二分查找原创 2012-07-01 11:58:44 · 6304 阅读 · 0 评论