算法与数据结构
真是适合睡觉的天气
这个作者很懒,什么都没留下…
展开
-
Java 排序算法 — 总结
各种排序性能对比如下图,有些排序未详细介绍,暂且放到这里。 实例测试结果可以看这里:八大排序算法耗时对比。排序类型 平均情况 最好情况 最坏情况 辅助空间 稳定性 冒泡排序 O(n²) O(n) O(n²) O(1) 稳定 选择排序 O(n²) O(n²) O(n²) O(1) 不稳定 直接...转载 2020-01-02 16:54:44 · 154 阅读 · 0 评论 -
Java 排序算法 — 基数排序
基数排序的发明可以追溯到1887年赫尔曼·何乐礼在打孔卡片制表机(Tabulation Machine), 排序器每次只能看到一个列。它是基于元素值的每个位上的字符来排序的。 对于数字而言就是分别基于个位,十位, 百位或千位等等数字来排序。基数排序(Radix sort)是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字...转载 2020-01-02 16:53:33 · 229 阅读 · 0 评论 -
Java 排序算法 — 归并排序
归并排序是建立在归并操作上的一种有效的排序算法,1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。1、基本思想归并排序算法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。2、算法描述归并排序可...转载 2020-01-02 16:52:56 · 145 阅读 · 0 评论 -
Java 排序算法 — 快速排序
快速排序(Quicksort)是对冒泡排序的一种改进,借用了分治的思想,由C. A. R. Hoare在1962年提出。1、基本思想快速排序的基本思想:挖坑填数+分治法。首先选一个轴值(pivot,也有叫基准的),通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。2、算法描述快速排...转载 2020-01-02 16:52:11 · 109 阅读 · 1 评论 -
Java 排序算法 — 冒泡排序
我想对于它每个学过C语言的都会了解,这可能是很多人接触的第一个排序算法。1、基本思想冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。2、算法描述...转载 2020-01-02 16:51:15 · 197 阅读 · 0 评论 -
Java 排序算法 — 堆排序
1991年的计算机先驱奖获得者、斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd) 和威廉姆斯(J.Williams) 在1964年共同发明了著名的堆排序算法(Heap Sort).堆的定义如下:nn个元素的序列{k1,k2,···,kn}{k1,k2,···,kn}当且仅当满足下关系时,称之为堆。{kiki⩽k2i⩽k2i+1或{kiki⩾k2i⩾k2i+...转载 2020-01-02 16:49:21 · 96 阅读 · 0 评论 -
Java 排序算法 — 简单选择排序
"选择排序的示例动画。红色表示当前最小值,黄色表示已排序序列,蓝色表示当前位置。")选择排序的示例动画。红色表示当前最小值,黄色表示已排序序列,蓝色表示当前位置。从算法逻辑上看,选择排序是一种简单直观的排序算法,在简单选择排序过程中,所需移动记录的次数比较少。1、基本思想选择排序的基本思想:比较 + 交换。在未排序序列中找到最小(大)元素,存放到未排序序列的起始位置。在所有...转载 2020-01-02 16:48:28 · 123 阅读 · 0 评论 -
Java 排序算法 — 希尔排序
希尔排序,也称递减增量排序算法,1959年Shell发明。是插入排序的一种高速而稳定的改进版本。希尔排序是先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。1、基本思想将待排序数组按照步长gap进行分组,然后将每组的元素利用直接插入排序的方法进行排序;每次再将gap折半减小,循环上述操作;当gap=1...转载 2020-01-02 16:47:27 · 213 阅读 · 0 评论 -
Java 排序算法 — 直接插入排序
插入排序的设计初衷是往有序的数组中快速插入一个新的元素。它的算法思想是:把要排序的数组分为了两个部分, 一部分是数组的全部元素(除去待插入的元素), 另一部分是待插入的元素; 先将第一部分排序完成, 然后再插入这个元素. 其中第一部分的排序也是通过再次拆分为两部分来进行的.插入排序由于操作不尽相同, 可分为直接插入排序,折半插入排序(又称二分插入排序),链表插入排序,希尔排序。我...转载 2020-01-02 16:45:39 · 207 阅读 · 0 评论 -
哈希碰撞与生日攻击
一、哈希碰撞是什么?所谓哈希(hash),就是将不同的输入映射成独一无二的、固定长度的值(又称"哈希值")。它是最常见的软件运算之一。如果不同的输入得到了同一个哈希值,就发生了"哈希碰撞"(collision)。举例来说,很多网络服务会使用哈希函数,产生一个 token,标识用户的身份和权限。AFGG2piXh0ht6dmXUxqv4nA1PU120r0yMAQhuc1...转载 2019-10-23 14:31:30 · 1290 阅读 · 3 评论