![](https://img-blog.csdnimg.cn/20190903001002468.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构
野生杂学家阿博
发现问题,解决问题,总结反思。
展开
-
算法与数据结构笔记20——选择排序(Selection sort)
概念选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。代码示例package com.wyb.sort;import java.util...原创 2019-03-06 09:34:19 · 218 阅读 · 0 评论 -
算法与数据结构笔记19——希尔排序(Shell's Sort)
概念希尔排序(Shell’s Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。代码实例package com.wyb.sort;import java.util.Arrays;/** * 类说明:希尔排序 */public class ShellSort ...原创 2019-03-06 08:58:47 · 139 阅读 · 0 评论 -
算法与数据结构笔记18——直接插入排序
算法基本思想把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序表中有n-1个元素;排序过程即每次从无序表中取出第一个元素,将它插入到有序表中,使之成为新的有序表,重复n-1次完成整个排序过程。代码实例package com.wyb.sort;import java.util.Arrays;public class InsertSort { publ...原创 2019-02-13 10:12:20 · 215 阅读 · 0 评论 -
算法与数据结构笔记17——快速排序(Quicksort)
前言前面我们说到冒泡排序,下面要讲的快速排序是对冒泡排序的改进。快速排序的概述快速排序是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序代码示例package com.wyb.sort;import java.util.Arr...原创 2019-02-13 09:35:01 · 234 阅读 · 0 评论 -
算法与数据结构笔记16——冒泡排序(Bubble Sort)
冒泡排序概述冒泡排序是指重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。冒泡排序原理比较两个相邻的元素,将值大的元素交换至右端。冒泡排序实现思路依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数...原创 2019-02-13 09:24:19 · 273 阅读 · 0 评论 -
算法与数据结构笔记15——算法的时间复杂度和空间复杂度
时间复杂度(Time Complexity)一般情况下,算法中的基本操作语句的重复执行是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),是的使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n) = O(f(n)),称为算法的渐进时间复杂度,简称时间复杂度。俗称:算法运行的时间;常见的时间复杂度常数阶O(...原创 2019-02-12 17:01:47 · 205 阅读 · 0 评论 -
算法与数据结构笔记14——递归
递归概述在一个方法(函数)的内部调用该方法(函数)本身的编程方式。递归的例子package com.wyb.recursion;public class TestRecursion { public static void main(String[] args) { print(10); } // 递归 public static void print(int i) {...原创 2019-02-12 16:09:40 · 148 阅读 · 0 评论 -
算法与数据结构笔记13——双向循环链表
双向循环链表概述双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。一般我们都构造双向循环链表。双向循环链表图代码示例1.创建一个双向链表类DoubleNodepackage com.wyb.doublenode;public class DoubleNode ...原创 2019-02-12 11:53:37 · 919 阅读 · 0 评论 -
算法与数据结构笔记12——循环链表
循环链表概述循环链表是另一种形式的链式存贮结构。表中最后一个结点的指针域指向头结点,整个链表形成一个环。循环链表图循环链表Demo1.创建一个循环链表类LoopNodepackage com.wyb.loop;public class LoopNode { // 节点内容 int data; // 下一个节点 LoopNode next = this; publi...原创 2019-02-12 10:08:25 · 168 阅读 · 0 评论 -
算法与数据结构笔记11——单链表(Singly Linked List)
前言了解数据结构的小伙伴,应该有听说过单链表。那么是单链表呢?单链表的使用是怎么样的呢?下面就分享一下我理解的单链表。单链表概念单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。单链表示例图单链...原创 2019-02-11 18:33:20 · 478 阅读 · 0 评论 -
算法与数据结构笔记10——队列
前言上一篇博客讲到栈,栈的特点就是先进去后出来。队列是先进去先出来,这篇博客分享一下什么是队列。队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。队列Demo示例1.创建一个队列类MyQueue...原创 2019-02-11 15:25:07 · 157 阅读 · 0 评论 -
算法与数据结构笔记9——栈(stack)
前言相信学习编程的小伙伴们都有听说过栈,那什么是栈呢?要什么清晰表达呢?这篇博客将为大家分享“栈”。栈栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,...原创 2019-02-07 22:33:58 · 224 阅读 · 2 评论 -
算法与数据结构笔记8——查找算法整合
前言前面我有给大家分享查找算法的线性查找和二分查找,那这两种查找方法是不是可以整合一下呢?当然是可以的啦!下面分享一个查找算法的整合Demo。Demo代码1.创建一个工具类MyArray.javaimport java.util.Arrays;public class MyArray { /** 用于存储数据的数组 */ private int[] elements; publ...原创 2019-01-16 19:34:08 · 239 阅读 · 0 评论 -
算法与数据结构笔记7——查找算法之二分查找法
二分查找法二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。代码举例/** 二分查找法 */public class TestBinarySearch { public static void main(String[] args) { // 目标数组 int[] arr =...原创 2019-01-03 23:09:50 · 336 阅读 · 0 评论 -
算法与数据结构笔记6——查找算法之线性查找
线性查找的概念线性查找又称顺序查找,是一种最简单的查找方法,它的基本思想是从第一个记录开始,逐个比较记录的关键字,直到和给定的K值相等,则查找成功;若比较结果与文件中n个记录的关键字都不等,则查找失败。代码举例/** * 类说明:线性查找 */public class TestSearch { public static void main(String[] args) { in...原创 2018-12-31 10:41:41 · 167 阅读 · 0 评论 -
算法与数据结构笔记5——线性结构之面向对象的数组
面向对象的数组代码示例:1.创建一个面向对象的类MyArrayimport java.util.Arrays;public class MyArray { /** 用于存储数据的数组 */ private int[] elements; public MyArray() { elements = new int[0]; } /** 获取数组长度的方法 */ publi...原创 2018-12-31 10:25:18 · 133 阅读 · 0 评论 -
算法与数据结构笔记4——线性结构之数组
数组图例数组的基本使用代码举例:public class TestArray { public static void main(String[] args) { // 创建一个数组 int[] arr1 = new int[3]; // 获取数组长度 int length1 = arr1.length; System.out.println("arr的长度:"+le...原创 2018-12-30 21:40:53 · 139 阅读 · 0 评论 -
算法与数据结构笔记3——线性结构
线性结构线性结构中的元素存在一对一的相互关系。它包括:数组;栈;队列;单链表;循环链表;双链表;递归;排序算法。原创 2018-12-30 20:37:32 · 127 阅读 · 0 评论 -
算法与数据结构笔记2——算法概述
算法的定义是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。算法的特性输入:指的算法有0到多个输入,执行算法我们能够提供0到多个数据。输出:指的是算法的输出结果。有穷性:指的是在有限的步骤里面执行出结果。确定性:指的是一个输入对应一个输出。可行性:指的是算法要能够解决实际问题。算法的基本要求正确性:算法要能正确的解决问...原创 2018-12-30 19:55:44 · 214 阅读 · 0 评论 -
算法与数据结构笔记1——数据结构概述
什么是数据结构数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中元素之间的关系组成。数据结构的分类数据的存储结构数据的逻辑结构1.数据的存储结构分类①顺序存储结构②链式存储结构①顺序存储结构顺序存储结构是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。数组就是顺序存储结构的典型代表。②链式存储结构在计算机中用一组任意的存储单...原创 2018-12-30 19:37:55 · 254 阅读 · 0 评论