![](https://img-blog.csdnimg.cn/20200514215152308.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制
suixinghero
真正的大师永远怀着一颗学徒的心
展开
-
KMP算法详解
1、应用场景-字符串匹配问题(1)有一字符串str1=“BBC ABCDAB ABCDABCDABDE”,和一个子串str2=“ABCDABD”(2)现在要判断str1是否含有str2,如果存在,就返回第一次出现的位置,如果没有,就返回-12、暴力匹配算法2.1如果使用暴力匹配的思路,并假设现在str1匹配到i位置,子串str2匹配到j的位置,则有:(1)如果当前字符匹配成功(即str1[i] == str2[j]),则i++,j++,继续匹配下一个字符(2)如果匹配失败(即str1[i] !=原创 2020-06-06 21:10:29 · 269 阅读 · 0 评论 -
选择排序之堆排序
1.堆排序的基本介绍(1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。(2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子节点的值,称为大顶堆,注意:没有要求节点的左孩子的值和右孩子的值的大小关系。(3)每个节点的值都小于或等于其左右孩子节点的值,称为小顶堆。(4)大顶堆举例说明:(5)小顶堆举例说明2.堆排序的基本思想(1)将待排序序列构造成一个大顶堆。(2)此时,整个序列原创 2020-05-19 21:35:58 · 465 阅读 · 0 评论 -
查找算法
1.顺序查找算法顾名思义就是按照数组下标顺序进行目标元素的查找。//顺序查找public void sequentialSearch(int[] array, int target){ //顺序查找,顾名思义就是按数组的顺序来查找 for (int i = 0; i < array.length; i++) { if (array[i] == target) { System.out.println("找到匹配的元素了,它的下标为:"+i)原创 2020-05-17 14:40:32 · 151 阅读 · 0 评论 -
基数排序
1.基数排序介绍(1)基数排序属于”分配式排序“,又称”桶子法“,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些”桶“中,达到排序的作用。(2)基数排序属于稳定排性的排序,基数排序法是效率高的稳定性排序法。(3)基数排序是桶排序的扩展。(4)基数排序是1887年赫尔曼.何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。(5)基数排序将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到原创 2020-05-16 22:56:01 · 133 阅读 · 0 评论 -
归并排序
1.基本介绍归并排序(merge sort)是利用归并排序的思想实现的排序方法,该算法采用今典的分治策略。分治法将问题分成一些小的问题然后递归求解,而治的阶段将分的阶段得到的各答案和在一起,即分而治之。2.示意图3.代码演示@Testpublic void testSort(){ //我们来测一下各种排序速度 int[] array = new int[100000]; for (int i = 0; i < array.length; i++) {原创 2020-05-16 19:25:34 · 88 阅读 · 0 评论 -
交换排序之快速排序
1.快速排序的基本介绍快速排序(QuickSort)是对冒泡排序的一种改进。基本思想:通过一趟排序将要排序的数据分隔成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行。2.快速排序的示意图3.代码分析@Testpublic void testSort(){ //我们来测一下各种排序速度 int[] array = new int[100000]; for (int i = 0; i &原创 2020-05-15 22:06:06 · 205 阅读 · 0 评论 -
插入排序之希尔排序
1.直接插入排序存在的问题直接插入排序与希尔排序相比还是有一些问题的。结论:当需要插入的数是比较小的数时,后移的次数明显增多,对效率有影响。2.希尔排序的基本介绍(1)希尔排序就是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是插入排序,它是简单插入排序经过改进之后的一个更高晓的版本,也成为缩小增量排序。(2)希尔排序是把记录按下标的一定增量分组,对每个分组使用直接插入算法排序:随着增量逐渐减少,每组包含的关键词越来越多,当增量减少到1时,整个数组就会被分成一组,算法原创 2020-05-15 16:28:32 · 104 阅读 · 0 评论 -
直接插入排序算法
1.基本介绍(1)插入式排序属于内部排序法,是对与排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。(2)插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把它与有序表中的元素进行比较,将它插入到有序表中的适当位置,使之称为新的有序表。2.思路图3.代码演示@Testpublic void testSort(){ //我们原创 2020-05-15 15:01:39 · 165 阅读 · 0 评论 -
简单选择排序
1.基本介绍(1)选择排序也属于内部排序法,是从与排序的数据中,按指定的规则选出某个元素,再按规定交换位置后达到排序的目的。(2)选择排序(select sorting)也是一种简单的排序方法。它的基本思想是:第一次从arr[0]-arr[n-1]中选取最小值与arr[0]交换,第二次从arr[1]-arr[n-1]中选取最小值与arr[1]交换,…,第i次从arr[i-1]-arr[n-1]中选取最小值,与arr[i-1]交换,…,第n-1次从arr[n-2]-arr[n-1]中选取最小值与arr[n原创 2020-05-14 23:39:27 · 197 阅读 · 0 评论 -
交换排序之冒泡排序
1.基本介绍冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下表较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就像水底下的气泡一样逐渐向上冒。因为排序的过程中,个元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较。2.示例图3.冒泡代码演示@Testpublic void testSort(){ //我们来测原创 2020-05-14 23:00:17 · 252 阅读 · 0 评论 -
排序算法
1.排序算法的介绍排序也称排序算法,排序是将一组数据,依指定的顺序进行排列的过程。2.排序的分类(1)内部排序:指将需要处理的所有数据都加载到内部存储器(内存)中进行排序。(2)外部排序法:数据量过大,无法全部加载到内存中,需要借助外部存储(文件等)进行排序。(3)常见的排序算法分类(见右图):3.算法的时间复杂度3.1度量一个程序(算法)执行时间的两种方法(1)事后统计的方法这种方法可行,但是有两个问题:一是要想对设计的算法的运行性能进行评测。需要实际运行该程序;二是所得时间的统计量原创 2020-05-14 21:48:53 · 140 阅读 · 0 评论