数据结构和算法
chenming3030
这个作者很懒,什么都没留下…
展开
-
高级排序-快速排序
原理快速排序是对冒泡排序的一种改进。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一 部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序 过程可以递归进行,以此达到整个数据变成有序序列。首先设定一个分界值,通过该分界值将数组分成左右两部分;将大于或等于分界值的数据放到到数组右边,小于分界值的数据放到数组的左边。此时左边部分中各元素都小于 或等于分界值,而右边部分中各元素都大于或等于分界值;然后,左边和右边的数据可以独立排序。对于原创 2020-08-12 21:38:08 · 187 阅读 · 0 评论 -
高级排序-归并排序
原理归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子 序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序 表,称为二路归并。尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,直到拆分后的每个子组的元素个数是 1为止。将相邻的两个子组进行合并成一个有序的大组;不断的重复步骤2,直到终只有一个组为止。代码示例public class Merge { private sta原创 2020-08-12 21:34:08 · 124 阅读 · 0 评论 -
高级排序-希尔排序
原理选定一个增长量h,按照增长量h作为数据分组的依据,对数据进行分组;对分好组的每一组数据完成插入排序;减小增长量,最小值为1,重复第二步操作。增长量h的确定:增长量h的值每一固定的规则,采用以下规则:int h=1; while(h<5) { h=2h+1;//3,7 }//循环结束后我们就可以确定h的大值; h的减小规则为: h=h/2代码示例public class Shell { public static void sort(Compara原创 2020-08-11 22:37:09 · 117 阅读 · 0 评论 -
插入排序
原理把所有的元素分为两组,已经排序的和未排序的;找到未排序的组中的第一个元素,向已经排序的组中进行插入;倒叙遍历已经排序的元素,依次和待插入的元素进行比较,直到找到一个元素小于等于待插入元素,那么就把待 插入元素放到这个位置,其他的元素向后移动一位;代码示例public class Insertion { public static void sort(Comparable[] a) { for (int i = 1; i < a.length - 1; i++) { f原创 2020-08-11 22:28:51 · 136 阅读 · 1 评论 -
选择排序
排序原理每一次遍历的过程中,都假定第一个索引处的元素是小值,和其他索引处的值依次进行比较,如果当前索引处 的值大于其他某个索引处的值,则假定其他某个索引出的值为小值,后可以找到小值所在的索引交换第一个索引处和小值所在的索引处的值代码示例public class Selection { public static void sort(Comparable[] a) { for (int i = 0; i < a.length - 1; i++) { int minIndex原创 2020-08-10 23:06:01 · 130 阅读 · 0 评论 -
冒泡排序
排序原理比较相邻的元素。如果前一个元素比后一个元素大,就交换这两个元素的位置。对每一对相邻元素做同样的工作,从开始第一对元素到结尾的后一对元素。终后位置的元素就是最大值。代码示例public class Bubble { public static void sort(Comparable[] a) { for (int i = a.length - 1; i > 0; i--) { for (int j = 0; j < i; j++) { if(great原创 2020-08-10 22:50:44 · 983 阅读 · 0 评论 -
字符串匹配 - KMP算法
阮一峰老师的技术文章讲的确实厉害,深入浅出。有兴趣的同学可以去学习一下:http://www.ruanyifeng.com/blog/2013/05/Knuth–Morris–Pratt_algorithm.html原创 2019-07-19 17:11:31 · 228 阅读 · 0 评论