
数据结构和算法
pianpiannia
这个作者很懒,什么都没留下…
展开
-
简单排序——希尔排序
基本思想: 将数组下标按一定增量进行分组,然后将被分组的元素进行排序(并不是只有两个元素进行比较,而是多个),一次排序完成后再取比第一次小的增量进行排序,直到增量为1。 图解(这是引用百度百科的图,增量依次为5,3,1) 代码实现:public static void shellSort(int arr[]){ //这里将初始增量为数组长度一半(并不代表一定要这样原创 2017-07-20 21:16:18 · 227 阅读 · 0 评论 -
(2)栈
栈是限定仅在表头进行插入和删除操作的线性表。栈作为一种数据结构,按照先进后出的原则存储数据,先进的数据被压在栈底,最后的数据放在栈顶,栈数据的插入称为入栈,栈数据的的删除称为出栈。 栈分为顺序栈和链式栈。 下面编写一个顺序栈,用数组实现。public class Stack { private Object[] data; private int maxSize;原创 2017-07-29 11:12:32 · 198 阅读 · 0 评论 -
快速排序
基本思想 设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。但是快速排序不稳定,相同的值排序后位置可能会发生改变。代码实现package jun.test;public class QuickSort { public static void main原创 2017-08-21 10:31:34 · 199 阅读 · 0 评论 -
(1)简单数组
编写一个数组:public class TestArray { private int[] arr; private int maxSize; //数组大小 private int length; //当前长度,即数组中有多少项 /** * * @Description:初始化数组 * @param max 数组大小原创 2017-07-28 14:05:05 · 463 阅读 · 0 评论 -
归并排序
先说说归并的概念:归并就是将两个或多个有序表合并成一个有序表的过程。若将两个有序表合成一个有序表则称为二路归并,同理,有三路归并、四路归并等。二路归并最为简单和常用。 归并排序就是指利用归并操作把一个无序表排序成一个有序表的过程。 利用二路归并操作进行排序称为二路归并排序,具体过程:首先把待排序表中的每一个元素都看做一个有序表,那么n个元素构成n个有序表。接着两两归并一趟归并得到[n/2]个原创 2017-08-03 18:37:26 · 382 阅读 · 0 评论 -
(5)二叉树
二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树。 二叉树若直接定义可能会造成畸形,对树畸形的改进一般有两种方法, - 方法一:平衡二叉树。 - 方法二:红黑树。 对平衡二叉树的定义:左右子树的高度相差不超过1。 调整方法:http://blog.youkuaiyun.com/a454042522/article/details/85914原创 2017-08-01 21:09:07 · 202 阅读 · 0 评论 -
简单排序——选择排序
基本思想: 每次从待排序序列中选出最大或最小的元素放在序列的起始位置,直到所有待排序的元素排列完成代码实现:public static void main(String[] args) { int[] array = new int[]{1,3,6,2,8,7,10,4,9,5}; selectSort(array);//选择排序,不稳定 }原创 2017-07-19 16:31:40 · 201 阅读 · 0 评论 -
计数排序
技术数组是一个用空间换时间的算法,直接代码分析public class countSort { public static void main(String[] args) { int[] a = new int[]{1,4,2,3,4,8,5}; sort(a,9); for(int i=0; i<a.length; i++){原创 2017-08-07 20:46:51 · 259 阅读 · 0 评论 -
简单排序——直接插入排序
基本原理: 对于给定的一组初始数据,假定其第一个数据为有序序列,从第二个数据开始为无序序列,接着从第二个数据开始,依次和之前有序序列比较,插入到合适位置。代码实现:public static void main(String[] args) { int[] array = new int[]{1,3,6,2,8,7,10,4,9,5}; insertS原创 2017-07-19 10:25:57 · 287 阅读 · 0 评论 -
(4)链表
链表相比与数组,在进行循环遍历时效率不高,但是插入和删除的优势明显。 链表实际上是由节点组成的,一个链表对外暴露的只有根节点,我们对链表的所以操作都是直接或间接的通过根节点来进行的。 而节点是由一个需要存储的对象和对下一节点的引用组成的,即节点拥有两个成员:存储的对象、下一节点的引用。 写一个简单链表。package jun.text;class Link{//链表类,外部能够看见的只有这一个原创 2017-07-31 11:07:47 · 182 阅读 · 0 评论 -
简单排序——冒泡排序及其优化
冒泡排序的基本思想: 首先根据顺序将两个相邻的元素进行两两比较,将两个元素按从小到大或从大到小的顺序交换,这样完成一轮比较后,最大或最小的元素将被换到最后一位,然后再从头开始进行两两比较,这样找出第二大或第二小的元素放在倒数第二位,以此类推。冒泡排序的Java实现:public class BubbleTest { public static void main(String[]原创 2017-07-18 18:09:48 · 278 阅读 · 0 评论 -
(3)队列
队列相比与栈的特点是先进先出,和日常生活中的排队是一样的。 写一个简单队列:public class Queue { private Object[] data; private int maxSize; //队列的最大长度 private int front; //队头 private int rear; //队尾 priva原创 2017-07-30 12:30:53 · 315 阅读 · 0 评论 -
堆排序
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法,它是选择排序的一种。先说 一下什么是堆。二叉堆的定义: 堆分为大根堆和小根堆两种。对于一个小根堆,它是具有如下特性的一颗完全二叉树。若树根结点存在左孩子,则根结点的值(或某个域的值)小于等于左孩子结点的值(或某个域的值);若树根结点存在右孩子,则根结点的值(或某个域的值)小于等于右孩子结点的值(或某个域的值);以原创 2017-08-23 16:50:05 · 193 阅读 · 0 评论