
数据结构与算法(Java)
qq_32468225
这个作者很懒,什么都没留下…
展开
-
桶排序
工作原理:1.将数组分到有限数量的桶里。2.每个桶再进行个别排序【使用其他排序算法或者以递归实行桶排序】由此可以看出桶排序利用了分治思想。利用桶排序解决{7,21,8,23,31,32,43}的排序问题:基于二维数组的实现:public class BucketSort{ public static void bucketSort(int[] arr){ //分桶,这里采用映射原创 2017-11-15 16:31:25 · 211 阅读 · 0 评论 -
插入排序
插入排序分为直接插入排序和希尔排序两种。直接插入排序:基本思想:假设待排序的记录存放在数组R[1..n].初始时。R[1]自成一个有序区域,R[2…n]为无序区域。从i=2到i=n为止,依次将R[1..i-1]中,生成n个记录的有序区域方法:首先在当前有序区域R[1..i-1]中查找R[i]的正确插入位置k[1<=k<=i-1]:然后将R[k..i-1]中的记录均后移一个位置,腾出k位置圣的空间插入原创 2017-11-20 23:35:31 · 156 阅读 · 0 评论 -
冒泡排序
冒泡排序基本思想:基本思想:通过相邻两数间的比较和交换,使得数值较小的数逐渐从底部向顶部转移。排序较大的数逐渐从顶部移到底部,就像水底气泡向上冒。关于时间复杂度:1.最好时间复杂度初始状态正序,一趟扫描即可完成排序。所需关键字比较次数C 和 记录移动次数 M 均达到最小值: Cmin= n-1,Mmin=0冒泡排序最好的时间复杂度是O(n)2.最坏时间复杂度初始状态为反序,n-1趟排序每趟排序进行原创 2017-11-16 20:36:12 · 213 阅读 · 0 评论 -
分析ArrayList和LinkedList的区别
我们总说数组随机访问时性能更优,链表在进行增删操作时性能更优。姑且试着从JDK源码的ArrayList和LinkedList一看究竟吧。以增加和删除元素分析ArrayList和LinkedListadd操作:public boolean add(E e) {ensureCapacity(size + 1); // Increments modCount!!elementData[size++]原创 2017-12-05 20:50:58 · 287 阅读 · 0 评论 -
手动实现-队列
队列:基本概念:队列也是一种操作受限的线性表。只能在一端进行插入而在另一端进行删除。允许插入的一端称为队尾【rear】,允许删除的另一端称为队头【front】。队头删除元素称作出队,队尾插入元素称为进队。队列ADT:顺序队列:队列顺序存储就是使用数组依次存储相应数据元素。此时队列称为顺序队列。通常进队列数据由低地址到高地址一次存放。队头元素是数组中首元素。pub...原创 2018-04-30 10:51:08 · 665 阅读 · 0 评论 -
手动实现-栈
栈:基本概念:栈也称作堆栈,逻辑上可以看作是一种特殊的线性表,其特殊性在于数据插入和数据删除受限,只能在线性表的同一端进行。栈的操作原则是“后进先出”,即LIFO(last in,first out).我们形象地将栈的插入和删除操作称作入栈和出栈。栈ADT基本操作:1.出栈操作和取栈操作的区别:出栈是将栈顶元素删除,操作后原来的次顶元成为新的栈顶元素;取栈顶元素只是读取栈顶元素...原创 2018-04-29 10:06:26 · 597 阅读 · 0 评论