数据结构与算法
小明同学YYDS
good good study!day day up!
展开
-
字符串全排列-递归实现
一个算法命题:给定字符串S[0…N-1],设计算法,枚举S的全排列。如:123,全排列就是:123,132,213,231,312,321算法思考根据递归的特点,深度划分子逻辑-递归,标识出口。全排列一个思维:对待全排序的序列中从左选定一个数作为基数,然后对他右边的数进行全排列,以此递归。算法描述以字符串1234为例:1 – 2342 – 1343 –原创 2017-12-29 15:31:22 · 2413 阅读 · 0 评论 -
字符串循环移动-高效优雅算法
命题:给定一个字符串S[0…N-1],要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动到字符串的尾部,得到新字符串“cdefab”:即字符串循环左移k。算法要求: 时间复杂度为 O(n),空间复杂度为 O(1)。算法思考可以采取的方法有:直接来个嵌套循环移动,但是时间复杂度不满足,空间复杂度满足。不可取三次拷贝,利用第三方空原创 2017-12-29 16:40:16 · 1754 阅读 · 0 评论 -
字符串全排列-非递归实现
一个算法命题:给定字符串S[0…N-1],设计算法,枚举S的全排列。如:123,全排列就是:123,132,213,231,312,321算法思考由123的全排列:123,132,213,231,312,321可知,这个全排列大小是有序的。也就是说,从最小的开始排列,每次只找比当前排列大一点的序列即可,这也是核心。算法描述起点:字典序最小的排列,例如12345终点:字典原创 2017-12-29 13:06:41 · 1686 阅读 · 0 评论 -
数据结构与算法:二叉树遍历
好久没敲代码,想来还是回过头看看基础点的回归感觉。二叉树是个基础数据结构,很难说直接在某个真实业务场景直接应用,很多基础数据结构都不可能直接搬到实际业务场景中使用,基础数据结构与其思想都是中级或高级数据结构的基础和构造过程,如同氢、氧元素构造成水,才直接提供给生物饮用。文章目录二叉树遍历发散二叉树遍历遍历的实际内容与代码实现如下。思想很简单,除了口诀式的记住遍历方案,还需主动去理解抽象...原创 2020-03-18 12:37:05 · 392 阅读 · 0 评论 -
数据结构与算法:堆排序
网上看了下很多堆排序的介绍,有些介绍很容易懂,自己再结合书上介绍的,网上没有的,以自己的理解,就当做个笔记文章目录概要概述堆排序几个重要的点构造初始堆图解堆排序图解代码实现(java)堆排序特点堆排序应用场景概要code语言:java、c测试环境:win、java8参考书籍:《数据结构与算法分析java语言描述》 原书第三版、《数据结构:使用C语言》、《算法导论》原书第三版参考链...原创 2019-04-15 00:28:46 · 944 阅读 · 0 评论 -
数据结构与算法:hash(散列表)
介绍hash散列表数据结构的个人理解文章目录概要hash概述装填因子hash函数hash函数演绎为什么说hash函数决定一个hash结构性能好坏解决hash冲突分离链接法分离链接法缺点开放定址法线性探测法线性探测法特点平方探测法双散列再散列标准库中的散列表(常用集合)散列表性质散列表丰富的应用介绍概要code语言:java测试环境:win、java8参考书籍:《数据结构与算法分析j...原创 2019-04-13 18:34:51 · 1111 阅读 · 0 评论 -
数据结构与算法:优先队列(堆)
一种数据结构,特殊场景使用,同样是使用堆结构,利用堆的特性文章目录概要概述图解优先队列构造初始堆进行入队列演示进行出队列演示代码实现堆 优先队列特点优先队列一般应用场景概要code语言:java、c测试环境:win、java8参考书籍:《数据结构与算法分析java语言描述》 原书第三版、《数据结构:使用C语言》、《算法导论》原书第三版参考链接:漫画:什么是优先队列?概述需...原创 2019-04-16 01:06:10 · 1117 阅读 · 0 评论 -
java实现冒泡排序
数据结构与算法复习同样学习过C语言版,这里用java实现冒泡排序,两种方式,也可称为一种。冒泡排序是一种非常简单的排序算法。名称缘由就是因为每次两两相邻的进行比较,一轮比较后,递增冒泡则是大的数往上冒(上浮)。本文介绍最常见的冒泡排序和升级版冒泡排序算法思想以递增排序为例: --从左往右,依次两两相邻的数进行比较 --若左边的数比右边的数大(ar原创 2017-12-29 17:26:47 · 817 阅读 · 0 评论 -
java实现二分查找-两种方式
二分查找是一种查询效率非常高的查找算法。又称折半查找。起初在数据结构中学习递归时实现二分查找,实际上不用递归也可以实现,毕竟递归是需要开辟额外的空间的来辅助查询。本文就介绍两种方法二分查找算法思想有序的序列,每次都是以序列的中间位置的数来与待查找的关键字进行比较,每次缩小一半的查找范围,直到匹配成功。一个情景:将表中间位置记录的关键字与查找关键字比较,如果两者相等,原创 2017-10-08 20:02:02 · 163426 阅读 · 23 评论 -
java实现希尔排序
希尔排序是插入排序的一种。常见的插入排序还有直接插入排序。希尔排序的前提是在直接插入排序之上,也就是对直接插入排序的一个升级版。希尔排序的产生直接插入排序的缺陷缺陷就是多次移动。这样一个情景,假如一个很小的数在靠右端的位置上,那么要将该数排序到正确位置上,那么所有的中间数据都需要往右移位如:2,3,4,5,1。当排序到最后1时,这个数需要插入到最前,所以原创 2017-10-08 19:38:48 · 694 阅读 · 1 评论 -
java实现直接插入排序
数据结构与算法复习同样学习过C语言版,这里用java实现直接插入排序常用的插入排序两种:直接插入排序和希尔排序,本文介绍的就是直接插入排序排序算法思想依次把待排序中的数插入到一个有序序列中。简单的实现方式就是,待排序数组第一个数是一个有序数组,那么依次从第二个数开始,把剩余的待排序序列从有序序列尾部开始依次比较,然后找到要插入的位置,然后新的序列原创 2017-10-08 16:38:36 · 379 阅读 · 0 评论 -
java实现直接选择排序
数据结构与算法复习同样学习过C语言版,这里用java实现直接选择排序实际上选择排序分为两种:直接选择排序和堆排序,本文介绍的就是直接选择排序算法思想从待排序的元素集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第一个数据元素交换位置;然后从不包括第一个位置的数据元素集合中选取关键字最小的数据元素并将它与原始数据集合中的第二个数据元素交换位置;如此重复,直到原创 2017-10-08 12:49:01 · 1527 阅读 · 0 评论 -
java实现快速排序算法
数据结构与算法复习之前学习过的学校的课程数据结构时有接触过快速排序,那时学习的是C语言版本,现在就以java语言版本来实现快速排序,作为再次熟悉。注:想直接看代码往下翻,或者找目录。算法思想在数组中取一个数作为中间值,然后经过一趟快速扫描排序后,数组中左边的数都比中间值小,数组右边的数都比中间值大。然后对划分的左右两个子数组递归重复之前的操作,也就是再次取中间值原创 2017-10-06 20:53:00 · 640 阅读 · 1 评论