![](https://img-blog.csdnimg.cn/20190918140129601.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构
算法与数据结构
-夏夜凉月-
最近在把博客里面的内容进行系统的整理,平常比较懒,没怎么写博客,趁最近有时间,做一个系统的整理,进行查漏补缺,如有不正确的望大家指正,笔者每个例子都经过测试,力争不误人子弟。
展开
-
排序算法之基数排序【Java版】
引言本篇是排序算法的最后一篇,基数排序,桶排序的升级版。1、算法步骤1、首先对一组数据按照个位上的数字进行桶排序2、然后对这组数据继续按照十位上的数字进行桶排序3、依次循环至这组数据的最大数位置上,排序就完成了。2、时间复杂度平均时间复杂度O(n + k)3、算法实现public class RadixSort { public static void main(String[] args) { int[] numbers = {12,2,24,30,6,16};原创 2020-07-04 19:56:16 · 174 阅读 · 0 评论 -
排序算法之桶排序【Java版】
引言本篇是排序算法的第八篇,桶排序,桶排序是计数排序的升级版。1、算法步骤1、设定一个基准,将待排序的数字按照一定范围,从小到大的平均分在N个桶中,此时桶已经排好序,桶中的元素还未排序;2、将桶中的元素进行排序。3、将每个桶按照从小到大的编号,依次取出里面的元素放入到待排序数组中,排序完成。2、时间复杂度平均时间复杂度O(n + k)3、算法实现public class BucketSort { public static void main(String[] args) {原创 2020-06-23 12:00:50 · 596 阅读 · 0 评论 -
排序算法之计数排序【Java版】
引言本篇是排序算法的第七篇,计数排序。1、算法步骤1、将待排序的数组里的值,作为新数组中的下标;2、新数组下标中对应的值重复的计数累加;3、最后新数组中下标有值的依次放到数组中(下标本身已经排好序了)。2、时间复杂度平均时间复杂度O(n + k)3、算法实现public class CountSort { public static void main(String[] args) { int[] numbers = {12,2,24,30,6,16};原创 2020-06-18 17:45:47 · 173 阅读 · 0 评论 -
排序算法之快速排序【Java版】
引言上一篇介绍的归并算法是一种分治思想,本篇的快速排序也是一种分治思想,这个分治思想真的值得好好感悟下,排序不仅仅是一种算法,最重要的是体会这种思想!1、算法步骤1、从待排序的序列中找一个数,作为本次比较的基准。2、将比基准小的放到基准前面,比基准大的放到基准后面。3、重复上述操作,直到排序完成。2、时间复杂度平均时间复杂度O(n log n)3、算法实现public class QuickSort { public static void main(String[] args)原创 2020-06-13 10:18:57 · 123 阅读 · 0 评论 -
排序算法之归并排序【Java版】
引言本篇是排序算法的第五篇,归并排序。1、算法步骤归并算法采用分治策略,如下图(图片来自网络):从上图可以看出算法步骤是:1、先将待排序序列用二分法形式递归的分开。2、再将分开的数据排序后递归的合并。2、时间复杂度平均时间复杂度O(n log n)3、算法实现public class MergeSort { public static void main(String[] args) { int[] numbers = {12,2,24,30,6,16};原创 2020-06-09 20:59:02 · 174 阅读 · 0 评论 -
排序算法之希尔排序【Java版】
引言本篇是排序算法的第三篇,希尔排序,是插入排序的一个更高效的改进版。1、算法步骤1、对需要排序的数列,按照不同的步长进行分组;2、对分组的数列进行组内排序;3、然后继续减小步长,重复1、2操作,当步长为1的时候,排序就完成了。下图是网上找的,下面的d表示间隔,也叫做增量,相同颜色的是一组:2、时间复杂度平均时间复杂度O(n log n),最好情况O(n log2^22 n)3、算法实现public class ShellSort { public static void m原创 2020-06-08 21:53:31 · 168 阅读 · 0 评论 -
排序算法之插入排序【Java版】
引言本篇是排序算法的第三篇,插入排序。1、算法步骤以需要排序的数组中第一位为基准点,从后面顺序选取一个数字,与前面的依次进行比较。如果结果小于被比较数字,则将被比较数字后移,并继续与之前的数字比较,直到大于被比数字,然后插入。2、时间复杂度平均时间复杂度O(n2n^2n2),最好情况O(n)3、算法实现public class InsertSort { public static void main(String[] args) { int[] numbers原创 2020-06-07 11:44:00 · 134 阅读 · 0 评论 -
排序算法之选择排序【Java版】
引言本篇是排序算法的第二篇,选择排序。1、算法步骤首先选择排序序列中最小的数字,然后放置到首位,第一轮结束。第二轮再在剩余的排序队列中选择最小的,再放置到第二位,继续循环,直到排序完成。2、时间复杂度平均时间复杂度O(n2n^2n2)3、算法实现public class ChoseSort { public static void main(String[] args) { int[] numbers = {12,2,24,30,6,16}; i原创 2020-06-05 21:11:56 · 172 阅读 · 0 评论 -
排序算法之冒泡排序【Java版】
引言本篇是排序算法的第一篇,后面的几篇将会陆续的更新。1、算法步骤比较相邻的元素。如果第一个比第二个大,就交换他们两个。从第一位开始,持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。2、什么时候最快当元素已经是正序的时候(因为这时候排序已经完成)3、什么时候最慢当元素已经是倒序的时候(因为这时候每个元素都要交换n-1次)4、算法实现public class BubbleSort { public static void main(String[] ar原创 2020-05-30 21:21:04 · 202 阅读 · 0 评论 -
数据结构之双向链表详细(java版)
前言双向链表是一种线性表,常见的线性表还有单向链表、栈、队列,本篇主要是分析双向链表的结构,以及如何使用java自己实现一个双向链表。1、单向链表在分析双向链表前,有必要先看看单向链表的结构图,方便对比双向链表数据结构。...原创 2020-05-23 10:28:11 · 484 阅读 · 0 评论