
算法
文章平均质量分 75
骑着火箭的蜗牛
自学Java的小白
展开
-
浅谈二分查找
一、二分查找的思想二分查找是一种生活中随处可见的查找算法。不知道大家有没有玩过猜数字这样的游戏。我随机想一个1-100之间的数据,然后让别人猜我想的数字。每猜一次我都会告诉他是猜大了还是猜小了,知道猜中为止。我想不会有人从1开始一直猜到100吧,聪明的人都会取一个中间值也就是从50开始猜起,如果猜大了,那么我们考虑的区间就会变成1-49,如果猜小了,我们考虑的区间就会变成51-100。运用这种思想我们每次猜测过后,所需要考虑的区间就会减少一半。怎么样,是不是很节省时间呢?再比如有100个价格不同的商品,原创 2021-01-31 11:50:19 · 254 阅读 · 0 评论 -
浅谈基数排序
浅谈桶排序浅谈计数排序之前的文章中介绍了两种时间复杂度为O(n)的排序算法,在今天的文章中我们再来介绍第三种时间复杂度为O(n)的排序算法–基数排序。首先现在思考这样一个问题,假设我们有100万个手机号码,我们需要做的是对这100万个手机号码进行排序,该从何入手呢?如果使用快速排序,时间复杂度可以做到O(nlogn),那么能否进一步优化,把时间复杂度降到更低呢?可能有朋友会觉得之前介绍过的桶排序、计数排序可以把时间复杂度降到O(n)。但是我们来思考一下,如果使用桶排序和计数排序,对于这么大的数据量,原创 2021-01-22 13:34:44 · 392 阅读 · 0 评论 -
浅谈计数排序
浅谈桶排序 上一篇文章中我们讲到了一种时间复杂度为O(n)的排序算法–桶排序,今天我们来分析一下另一种时间复杂度为O(n)的排序算法–计数排序。一、计数排序的原理计数排序实际上是桶排序的一种延伸。在桶排序中,我们把要排序的n个数据均匀的分配到了m个桶中。而计数排序是当我们要排序的n个数据范围不大的时候,我们可以将n个数分配到n个桶中。这样每个桶中存储的都是相同的数据,省去了桶内的快速排序,从而节省了时间。比如说我们每个人都经历过的高考,在查询成绩的时候我们可以看到自己的成绩以及所在省的排名。那么查分原创 2021-01-21 09:04:37 · 268 阅读 · 0 评论 -
浅谈桶排序
浅谈冒泡排序浅谈插入排序浅谈选择排序浅谈归并排序浅谈快速排序之前的文章介绍了时间复杂度为O(n²)的冒泡排序、插入排序和选择排序,以及时间复杂度为O(nlogn)的归并排序、快速排序。接下来的几篇文章,我们回来谈一谈时间复杂度为O(n)的排序算法:桶排序、计数排序、基数排序。因为这类算法的时间复杂度是线性的,所以我们又可以称这些排序算法为线性排序。主要原因在于这三种算法不涉及元素之间的比较操作。下面一起来走进今天的内容:桶排序看到名字,桶排序,我们可以大致根据字面意思理解为用到桶的排序算法。它原创 2021-01-19 21:17:04 · 780 阅读 · 0 评论 -
浅谈快速排序
浅谈归并排序在上一篇文章中,简单介绍了归并排序。归并排序的时间复杂度为O(nlogn),空间复杂度为O(n)。今天来介绍另一种时间复杂度同为O(nlogn)的常见排序算法–快速排序。快速排序的原理快速排序与归并排序一样,利用的都为分治思想。如果不细看的话,归并排序和快速排序其实差别并不是很大。但是二者的思路却是完全不一样的。这里我们首先先来说一下快速排序的核心思想。p快排的思想是这样的:如果要对数组中下标为p到r之间的元素进行排序,我们并不是像归并排序一样,选择p到r的中间点作为分割点,而是从其中原创 2021-01-17 21:42:57 · 172 阅读 · 0 评论 -
浅谈归并排序
浅谈冒泡排序浅谈插入排序浅谈选择排序在之前的文章中介绍了三种时间复杂度为O(n²)的排序算法,由于时间复杂度比较高,所以这三种算法适合数据规模比较小的排序。为此接下来将会介绍两种时间复杂度为O(nlogn)的排序算法,归并排序和快速排序。这两种排序比较常见于大规模的数据排序中。今天这篇文章我们先来讲解归并排序。一、归并排序的原理归并排序的原理很好理解,它运用了分治的思想和递归方法的实现。首先把一个数组拆分成两部分,然后对这两部分运用递归的方法拆分成更小的两部分,直到不能拆分为更小的单元为止,拆分做原创 2021-01-12 19:59:58 · 1134 阅读 · 0 评论 -
浅谈选择排序
浅谈冒泡排序浅谈插入排序前两篇文章中已经介绍过冒泡排序和插入排序,它们的时间复杂度都为O(n²),今天这篇文章将会介绍另一种时间复杂度为O(n²)的排序算法–选择排序。这种算法的实现思路与插入排序类似,也分已排序区间和未排序区间。但是选择排序每次会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。选择排序的原理如下图所示:对应的代码如下:public static void selectionSort(int[] a, int n) { if (n <= 1) retu原创 2021-01-10 21:19:44 · 155 阅读 · 0 评论 -
浅谈插入排序
浅谈冒泡排序上一篇文章中讲解了冒泡排序,冒泡排序无论是最好、最坏还是平均情况下时间复杂度都是O(n²),而且是原地稳定的排序算法。这篇文章中将会介绍另一种时间复杂度为O(n²),与冒泡排序同为原地稳定的排序算法–插入排序。我们可能会产生这种疑惑,各项指标都一样,我们为什么要引入插入排序算法呢?下面我们带着问题来进入今天的讲解插入排序的思想如下:我们要把6这个元素插入到一个数组中,首先需要根据元素之间的大小找到元素6要插入的位置,然后把这个位置之后的7、9、11、13这几个元素一次向后挪动一个位置,最后原创 2021-01-09 21:21:58 · 203 阅读 · 0 评论 -
浅谈冒泡排序
冒泡排序只会操作相邻的两个数据,即比较和交换。执行一次冒泡操作会至少让一个元素移动到它应该在的位置,重复n次,就完成了n个数据的排序工作。我们来举个例子,现在有一个数组,元素分别为5、1、4、3、2,第一次冒泡操作的详细过程如下图所示。经过一次冒泡,5这个元素到了a[4]的位置。每次排序就好像水底的泡泡一样,大的泡泡逐渐往上冒,所以称之为冒泡排序。接下来只需要再进行4次冒泡操作就可以使整个数组的元素从小到大排好序了。在实际的代码中,我们为了减少时间复杂度,可以考虑这样一种情况,当我们进行完一次冒泡操原创 2021-01-04 17:01:30 · 244 阅读 · 0 评论 -
浅谈排序算法--排序算法的分析
排序对于任何接触过程序的人来说都不会陌生。在大部分的编程语言中也提供了排序函数。常用的排序算法有:冒泡排序、插入排序、选择排序、归并排序、快速排序、计数排序、基数排序、桶排序。1.如何分析一个算法1.排序算法的执行效率对于排序算法的执行效率,一般从下面几个方面来分析(1)最好情况、最坏情况、平均情况时间复杂度为什么要区分这三种时间复杂度呢?第一,有些排序算法会区分,为了好对比,所以我们最好都做一下区分。第二,对于要排序的数据,有的接近有序,有的完全无序。有序度不同的数据,对于排序的执行时间肯定原创 2021-01-02 21:14:23 · 429 阅读 · 0 评论