本文根据<大话数据结构>一书,实现了Java版的堆排序. 更多:数据结构与算法合集 基本概念 堆排序种的堆指的是数据结构中的堆,而不是内存模型中的堆. 堆:可以看成一棵完全二叉树,每个结点的值都大于等于(小于等于)其左右孩子结点的值,称为大顶堆(小顶堆). 大顶堆(左)与小顶堆(右) 堆排序的基本思想:将带排序的序列构造成大顶堆,最大值为根结点.将根结点与最后一个元素交换,对除最大值外的剩下n-1个元素重新构造成大顶堆,可以获得次大的元素.反复执行,就可以得到一个有序序列了. 构造大顶堆的方法…
本文根据<大话数据结构>一书,实现了Java版的冒泡排序. 更多:数据结构与算法合集 基本概念 基本思想:将相邻的元素两两比较,根据大小关系交换位置,直到完成排序. 对n个数组成的无序数列,进行n轮排序,每轮按两两比较的方法找出最小(或最大)的一个.下图表示某数列的第一轮排序. 下面为交换元素的swap()方法代码,后面代码中将直接使用. public void swap(int[] a, int i, int j) { int temp; temp = a[j]; a[j] = a[i];…
本文根据<大话数据结构>一书,实现了Java版的快速排序. 更多:数据结构与算法合集 基本概念 基本思想:在每轮排序中,选取一个基准元素,其他元素中比基准元素小的排到数列的一边,大的排到数列的另一边:之后对两边的数列继续进行这种排序,最终达到整体有序. 图片来自公众号:程序员小灰 实现代码 根据上述基本思想,可以先写出快速排序最核心的代码:对于数组a中从下标为low至下标为high的元素,选取一个基准元素(记为pivotKey),根据与基准比较的大小,将这些元素排到基准元素的两端. 注意点:1…
本文根据<大话数据结构>一书,实现了Java版的归并排序. 更多:数据结构与算法合集 基本概念 归并排序:将n个记录的序列看出n个有序的子序列,每个子序列长度为1,然后不断两两排序归并,直到得到长度为n的有序序列为止. 归并方法:每次在两个子序列中找到较小的那一个赋值给合并序列(通过指针进行操作).当一个子序列遍历完成后,将另一个序列中剩下数赋值给合并序列.(详见代码) 归并排序示意图 完整Java代码 (含测试代码) public class MergeSort { public void…
本文根据<大话数据结构>一书,实现了Java版的直接插入排序. 更多:数据结构与算法合集 基本概念 直接插入排序思路:类似扑克牌的排序过程,从左到右依次遍历,如果遇到一个数小于前一个数,则将该数插入到左边所有比自己大的数之前,也就是说,将该数前面的所有更大的数字都后移一位,空出来的位置放入该数. Java代码 public void insertSort(int[] arr) { if(arr==null || arr.length<=0) return; for(int i=1;i&l…
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let‘s go~~~ 1.排序算法的基本概念的讲解 时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数. 空间复杂度:分析需要多少辅助的内存. 稳定性:如果记录两个关键字的A和B它们的值相等,经过排序后它们的位置没有发生交换,那么我们称这个排序算法是稳定的. 否则我们称这个排序算法是不稳定的.…
本文根据<大话数据结构>一书,实现了Java版的二叉排序树/二叉搜索树. 二叉排序树介绍 在上篇博客中,顺序表的插入和删除效率还可以,但查找效率很低:而有序线性表中,可以使用折半.插值.斐波那契等查找方法来实现,但因为要保持有序,其插入和删除操作很耗费时间. 二叉排序树(Binary Sort Tree),又称为二叉搜索树,则可以在高效率的查找下,同时保持插入和删除操作也又较高的效率.下图为典型的二叉排序树. 二叉查找树具有以下性质: (1) 若任意节点的左子树不空,则左子树上所有结点的值均小…
(明天补充) 主要是3种接口:List Set Map List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模拟 Set:HashSet没有重复记录的集合 Map:HashMap就是哈希表 Collection ├List │├LinkedList │├ArrayList │└Vector │ └Stack └Set Map ├Hashtable ├HashMap └WeakHashMap 数据结构参考链接…
一.排序算法 常见的排序算法主要分为下面几类: 选择排序 堆排序 冒泡排序 快速排序 插入排序 希尔排序 归并排序 桶式排序 基数排序 本文主要介绍选择排序.堆排序.冒泡排序.快速排序和归并排序的原理和Java代码实现. 二.算法实现 2.1 选择排序 选择排序的原理: 选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. Java实现: public static void selSort(…
Java 的八种排序算法 这个世界,需要遗忘的太多. 背景:工作三年,算法一问三不知. 一.八种排序算法 直接插入排序.希尔排序.简单选择排序.堆排序.冒泡排序.快速排序.归并排序和基数排序. 二.算法使用 1 直接插入排序 使用场景: 如把新的数据插入到已排好的数据列中. 实现思想: a.将第一个数和第二个数排序,然后构成一个有序序列: b.将第三个数插入进去,构成一个新的有序序列: c.对第四个数.第五个数……直到最后一个数,重复第二步.  代码实现: /** * @author tjt *…