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