算法
leslie_h10u
这个作者很懒,什么都没留下…
展开
-
6.关于链表的基本操作
关于链表的基本操作单向/双向链表(可以根据每个节点回溯到前置节点)prevdatanext指向前一个节点存储的数据指向下一个节点随机存储:每一个节点都可以分布在内存的不同位置,靠指针相互关联,有效利用了零散的碎片空间。链表的查询只能从头节点开始,向后一个一个节点逐一查询 /** * 链表查询元素 * @param index 查找的位置 */ public Node get (int index)throws Excepti原创 2020-08-01 18:13:56 · 160 阅读 · 0 评论 -
5.关于数组的插入
数组的插入尾部插入中间插入超范围插入尾部插入/中间插入需要数组的实际元素个数,小于数组的长度中间插入就是将插入位置及后面的元素,向后移动一位,再将要插入的元素放到对应的数组位置index012345data31254假设要在下标为1的位置插入一个元素,插入之前就会先操作得到一个这样的数组index012345data31254private void insert(int element,int原创 2020-08-01 16:00:36 · 1950 阅读 · 0 评论 -
4.二叉树的前后中序遍历
二叉树的遍历前中后三种遍历的区别,就是输出的执行位置不同二叉树的构建将线性链表转化为非线性二叉树。链表节点的顺序就是二叉树前序遍历的顺序,链表中的空值,就是leftchild/rightchild 为空的情况。public class TreeNodeTraverse { private static TreeNode createBinaryTree(LinkedList<Integer> inputList) { TreeNode node = null;原创 2020-07-31 22:45:31 · 123 阅读 · 0 评论 -
3.1 快速排序的单边循环(递归)
快速排序的单边循环(递归)1.基准元素pivot/mark 指针mark指针代表的是小于基准元素的区域边界2.遍历到的元素大于基准元素,继续遍历;3.遍历到的元素小于基准元素,mark指针向右移动一位(意味着多了一位比基准元素小的元素,所以pivot的区域边界增大了),最新遍历到的元素和mark位置的元素交换位置,因为该元素属于小于pivot的区域。4.这一轮宣告结束时,mark 左侧都是比它小的,右侧都是比它大的。再分成两部分进行递归,就完成了单边循环的快速排序。 public static原创 2020-07-31 17:13:57 · 879 阅读 · 0 评论 -
2.鸡尾酒排序
鸡尾酒排序如果大部分元素已经有序,使用冒泡排序的话,还要按照轮次排序,就有些繁琐了。推荐使用鸡尾酒排序public static void sort(int[] array){ int tmp=0; for (int i = 0; i < array.length/2; i++) { boolean isSorted=true; for (int j = i; j <array.length-i-1 ; j+原创 2020-07-31 14:53:40 · 65 阅读 · 0 评论 -
1.关于冒泡排序的优化
关于冒泡排序的优化数值相等的元素并不会打乱排序,需要总共遍历(元素数量-1)轮 O(n^2)/*Version1*/ public static void sortV1(int[] array) { for (int i = 0; i < array.length - 1; i++) {//外部循环控制所有回合 for (int j = 0; j < array.length - i - 1; j++) {//内部循环实现每一轮冒泡处理原创 2020-07-31 14:03:59 · 96 阅读 · 0 评论