![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
无声---
这个作者很懒,什么都没留下…
展开
-
经典快速排序的分析、实现、测试
1.快速排序的过程分析进过我多次查找资料,快速排序的实现方式有很多,我这里简述一种代码简洁无bug的方式,无需添加很多的判断。排序思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。以数组{4,7,6,3,2}为例:1.选取标志元素我这里选择数组的第一个元素4作为标志元素,当然也可以选取其他,例如中间的元素,最后一个元素,实现思路略有不同。2原创 2020-10-11 13:29:51 · 292 阅读 · 0 评论 -
经典希尔排序的分析、实现、测试
经典希尔排序的分析、实现、测试1.希尔排序的过程分析希尔排序是简单插入排序经过改进之后的一个更高效的版本,也叫缩小增量牌排序。插入排序存在一个问题:2.代码实现sort时分步骤进行分析的方法sort1是将sort进行抽象整合package test1;import java.util.Arrays;import java.util.Random;/** * 希尔排序 */public class ShellSort { public static void mai原创 2020-10-04 15:34:51 · 177 阅读 · 0 评论 -
经典插入排序的分析、实现、测试
经典插入排序的分析、实现、测试1.插入排序过程分析int arr[] = {3,9,-1,-10,-2};首先假设一个有序列表{3},一个无序列表{9,-1,-10,-2},每次从无序列表从左到右拿出一个数与有序列表的数进行比较,例如:拿出9,9大于3,所以有序列表为{3,9},无序列表为{-1,-10,-2};拿出-1,-1与9比,-1小,有序列表变为{3,-1,9},再拿-1与3比较,-1小,有序列表为{-1,3,9};…说起来容易做起来难,看代码实现。2.代码实现package tes原创 2020-10-04 11:21:48 · 191 阅读 · 0 评论 -
经典选择排序的分析、实现、测试
经典选择排序的分析、实现、优化、测试1.选择排序过程分析int arr[] = {3,9,-1,-10,-2};假设对arr这个数组进行排序:第一轮:用3和3后面的所有元素挨个比较,如果有比3小的,下一次比较就用这个较小的比较,例如:3与-1比较时-1比3小,那么下一次与-10的比较就用-1而不是3,最后找出最小的即-10,3和-10交换位置。{-10,9,-1,3,-2}结论:每一轮比较,会找到数组中最小的元素。…结论:排序思路比较好理解,代码写起来就不那么容易了,需要设置临时变原创 2020-10-03 16:05:33 · 353 阅读 · 0 评论 -
经典冒泡排序的分析、实现、优化及测试
经典冒泡排序的实现的分析、优化及测试1.冒泡排序的过程int arr[] = {3,9,-1,-10,-2};假设对arr这个数组进行排序,第一轮:(1)3和9进行比较,3不大于9,3和9的位置不交换(2)9和-1进行比较,9大于-1,9和-1交换位置,数组变为{3,-1,9,-10,-2}(3)9和-10进行比较,9大于-10,9和-10交换位置,数组变为{3,-1,-10,9,-2}(4)9和-2进行比较,9大于-2,9和-2交换位置,数组变为{3,-1,-10,-2,9}原创 2020-10-03 14:24:16 · 393 阅读 · 0 评论 -
用单向链表(头插法)实现栈
用单向链表(头插法)实现栈1.概述用单向链表实现栈,入栈时,新建一个Node结点,并把链表的最后一个Node结点指向这个新建的Node;出栈时,将最后一个结点的值用一个临时变量保存并输出,然后将结点置为null。2.代码实现package com.bhy.stackTest;public class SingleLinkedListStackDemo { public static void main(String[] args) { SingleLinkedListSt原创 2020-09-26 13:30:21 · 437 阅读 · 0 评论 -
用数组实现栈
用数组实现栈1.概述栈是一个先入后出(FILO-First In Last Out)的有序列表,是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。2.出栈(pop)和入栈(push)的概念3.代码实现:package com.bhy.stackTest;public class ArrayStackDemo { public static void main原创 2020-09-26 12:47:47 · 2648 阅读 · 0 评论 -
双向链表的实现
双向链表的实现1.概述设计了一个头结点为空的双向链表,可以添加元素(在链表的尾部添加元素)、删除元素、遍历元素,获取元素。2.代码实现package com.bhy.test;public class Demo5 { public static void main(String[] args) { MyDoubleLinkedList<Integer> list = new MyDoubleLinkedList<>(); list.原创 2020-09-24 23:11:13 · 463 阅读 · 0 评论 -
单链表的实现
单链表的实现1.概述设计了一个头结点为空的单向链表,可以向指定索引添加元素,删除元素。2.代码实现package com.bhy.test;public class Demo4 { public static void main(String[] args) { MySingleLinkedList<Integer> list = new MySingleLinkedList<>(); list.add(1,1);原创 2020-09-24 20:43:00 · 102 阅读 · 1 评论 -
用数组实现环形队列
用数组实现环形队列1.概述环形队列解决了上篇用数组实现的队列的缺点,即当添加了若干元素之后,再取出元素,数组前面的位置就无法再存入值。package com.bhy.test;public class Demo2 { public static void main(String[] args) { CircleQueue queue = new CircleQueue(4); queue.add(1); queue.add(2);原创 2020-09-24 08:47:13 · 147 阅读 · 0 评论 -
用数组实现队列
用数组实现队列1.概述队列是一个有序列表,可以用数组或是链表来实现。遵循先入先出的原则。即:先存入队列的数据,要先取出。后存入的要后取出。当我们将数据存入队列时称为”addQueue”,addQueue 的处理需要有两个步骤:思路分析(1) 将尾指针往后移:rear+1 , 当front == rear 【空】(2) 若尾指针 rear 小于队列的最大下标 maxSize-1,则将数据存入 rear所指的数组元素中,否则无法存入数据。 rear == maxSize - 1[队列满]2.原创 2020-09-23 00:29:50 · 936 阅读 · 0 评论 -
稀疏数组的生成与原数组的恢复
稀疏数组的生成与原数组的恢复1.稀疏数组的介绍当一个数组中大部分元素为0,或者为同一个值的数组时,可以使用稀疏数组来保存该数组。稀疏数组的处理方法是:记录数组一共有几行几列,有多少个不同的值。把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模。2.稀疏数组的实现package com.bhy.test1;/** * 1.稀疏数组 * 以棋盘为例 * <p> * 8x8 * 0 0 0 0 0 0 0 0 * 0 0 1 0 0 0 0 0 *原创 2020-09-22 21:04:31 · 152 阅读 · 0 评论