随笔分类 - 数据结构和算法
摘要:插入排序的思想:插入排序是在一个已经有序的小序列的基础上,一次插入一个元素。当然,刚开始这个有序的小序列只有1个元素,就是第一个元素。比较是从有序序列的末尾开始,也就是想要插入的元素和已经有序的最大者开始比起,如果比它大则直接插入在其后面,否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素
阅读全文
摘要:选择排序:比如在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。 平均时间复杂度:O(n2) 空间复
阅读全文
摘要:对于n个元素的序列{R0, R1, ... , Rn}当且仅当满足下列关系之一时,称之为堆: (1) Ri <= R2i+1 且 Ri <= R2i+2 (小顶堆) (2) Ri >= R2i+1 且 Ri >= R2i+2 (大顶堆) 堆其实是一个顺序存储的完全二叉树 完全二叉树: 顺序存储: 大
阅读全文
摘要:冒泡排序是排序算法中最基础的排序算法; 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换 如果待排序数组已经有序,用上面的算法会再完全比较一遍,我们还可以进行改进,也就是当检测到数组已经有序的时候就可以停止了 冒泡排序的优化
阅读全文
摘要:栈的定义: 栈(stack)是限定尽在表尾进行插入和删除操作的线性表。 从定义中可以看出,栈也是线性表,是一个特殊的线性表,之前说线性的表的时候,线性表可以在任意位置进行插入插入,而栈比线性表特殊的地方的就是不能随意的插入和删除了,栈的插入和删除只能在规定的同一端进行,而被允许插入和删除的一端称为栈
阅读全文
摘要:队列(Queue) 是只允许在一端进行插入操作,而在另一端进行删除操作的线性表 队列的特点就是:先进先出,和生活中排队的例子是很先进的,排队的目的不就是先到先得吗。 生活中的队列相当于顺序存储的队列,在火车站排队买票,前面的人买完票走了,后面的人一个一个往前移一位,这是很正常的事情,而计算机中队列队
阅读全文
摘要:单链表在存储结构上与顺序存储的区别:不用开辟连续的存储空间,存储位置任意,只需要让数据的前驱知道它的位置就可以,而使用单链表示只需要知道单链表的第一个元素就能找到其他所有的元素,为了方便 一般会设置一个头指针指向第一个元素。 单链表的数据读取:通过头指针一个一个往后遍历 单链表的插入: 删除: 自定
阅读全文
摘要:线性表的定义:零个或多个数据元素的有限序列。 定义的解读: 这么一看线性表抽象出来就和生活中的排队一样,一群小朋友站成一队,每个人都知道自己站在第几个,自己的前面是谁,后面谁,除了排头排位的两个数据,每个数据都有唯一的前驱和后继。 线性表的分类 今天先学习一下顺序存储结构,顺序存储结构指的就是用一段
阅读全文
摘要:问题描述 特点:如下图,基本上是一个m*n的矩阵,排列顺序如题目描述的一样 思路:从右上角的数开始查找,对于右上角的数来说,他的左侧的数比自己小,下方的数比自己大,如图:将待查找的数据与右上方的数比较时,如果比9小,查再查找9左边的数,如果比9大,则继续查找9下方的数,依次继续比较,知道找到或者x>
阅读全文
摘要:public class arithmetic { public static void main(String[] args) { int [] arr={1,2,5,7,9,13,16}; int result = binarySerach(9, arr); System.out.println("结果:"+result); } public static int ...
阅读全文
摘要:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)
阅读全文
浙公网安备 33010602011771号