随笔分类 -  algorithm

记录常见的数据结构与算法,包括实现原理,实现代码.
摘要:一、问题介绍 有一个迷宫地图,有一些可达的位置,也有一些不可达的位置(障碍、墙壁、边界)。从一个位置到下一个位置只能通过向上(或者向右、或者向下、或者向左)走一步来实现,从起点出发,如何找到一条到达终点的通路。本文将用两种不同的解决思路,四种具体实现来求解迷宫问题。 用二维矩阵来模拟迷宫地图,1代表 阅读全文
posted @ 2018-08-06 16:30 随性如风 阅读(36208) 评论(5) 推荐(4)
摘要:一、基本思想 归并排序,将当前序列分成若干个小的有序序列,然后逐个合并成更大的有序序列。这里所谓的若干个小的有序序列即是将序列分割成n个长度为1的序列,然后两两合并成长度为二的有序序列。然后在将这长度为二的有序序列合并为长度为四的有序序列。依次类推,最终达到原序列长度,这样,排序就完成了。这其实是归 阅读全文
posted @ 2018-06-21 23:26 随性如风 阅读(281) 评论(0) 推荐(0)
摘要:一、基本思想 堆排序是在选择排序基础上改进的排序,首先建立大根堆(即任意根节点的值均不小于子节点),然后每次取出堆顶元素,重新调整堆,然后再取出堆顶元素,直至最后一个堆元素被取出,则整个排序也就完成了。它的思想就是每次取出堆中的最大值,使其自然成序。 二、实现步骤 我们用一个数组来建立堆,期间会用到 阅读全文
posted @ 2018-06-21 15:26 随性如风 阅读(369) 评论(0) 推荐(0)
摘要:一、基本思想 每次从待排记录中选出最小值放在有序记录的末尾。等每一个待排元素均被选出后,整个记录排序就完成了。 二、实现步骤 这里采用双向选择排序,每次从待排记录中选出最大值和最小值,最大值和待排记录的最后一位交换位置,最小值和待排记录的第一位交换位置。 注意,交换位置分如下情况: 1)最大值在最左 阅读全文
posted @ 2018-06-20 13:00 随性如风 阅读(252) 评论(0) 推荐(0)
摘要:一、基本思想 快速排序是 一种基于交换的排序算法,是对冒泡排序的改进。它的基本思想是,通过一趟快速排序,将待排记录分割成独立的两部分,其中一部分的关键字均比另一部分小;在分别对这两部分进行排序排序,直至整个序列有序。 二、操作步骤 1.将待排记录分隔成独立的两部分,其中一部分的关键字均比另一部分小。 阅读全文
posted @ 2018-06-19 11:42 随性如风 阅读(573) 评论(0) 推荐(0)
摘要:一、基本思想 冒泡排序是一种基于数值交换的排序,从第一个元素开始,与后面紧接着的一个元素比较,如果当前这个数更大,则交换两者的数值,那么值更大的元素就像泡泡一样往后走。第n趟排序即可使第n大元素从前往后走。进行n-1次这样的"冒泡操作"后,整个序列就有序了。 二、实现代码 测试工具类 点击这里 三、 阅读全文
posted @ 2018-06-04 23:17 随性如风 阅读(574) 评论(0) 推荐(0)
摘要:一、基本思想 希尔排序是在插入排序的基础上进行改进的一种基于渐进思想的高效排序算法。它将一个序列从第一个元素开始,按增量d将序列划分成若干个子序列。 (例如:1 , 1+d ,1+2d..为一组,2 , 2+d , 2+2d...为一组) 对每个子序列进行插入排序,缩小增量d,这样,整个序列会渐渐的 阅读全文
posted @ 2018-05-27 16:07 随性如风 阅读(268) 评论(0) 推荐(0)
摘要:一、基本思想 插入排序是一种简单直观的排序方法,基本思想是从待排记录中选择一个元素插入到已经有序的序列中。当待排记录中所有的元素都插入到有序序列中后,整个排序也就完成了。 二、实现方法 大致思路:从无序序列中选取一个元素,在有序序列中找到合适的位置i,有序序列中i及其以后的元素后移,给待插元素让位。 阅读全文
posted @ 2018-05-27 13:59 随性如风 阅读(283) 评论(0) 推荐(0)
摘要:为了方便测试排序算法,下面展示了一些工具类,在之后的写的排序算法中会用到这些类。 一、随机数组生成类 二、打印数组类 三、排序类接口 四、测试类 阅读全文
posted @ 2018-05-27 13:42 随性如风 阅读(757) 评论(0) 推荐(0)