Counter-Strike大牛
业界老小白
爱工作,爱生活
展开
-
【算法】冒泡排序算法的讲解和代码实践
冒泡排序是十大排序算法中最简单的一种排序算法了,就算我不讲,估计大家也都能写出来。但是为了内容的完整性,还是写一下吧。 冒泡排序主要思路如下: 1、以第0个元素为例,将该元素与后面的元素依次进行比较; 2、如果该元素大于后面的元素,则进行交换; 3、所有元素都进行该操作,完成后数组即完成排序。有数组如下: 首先以第 0 个元素,即数字 2 开始进行冒泡。 2 与 第 1 个元素 1 进行对比,大于 1,与 1 进行交换: 交换之后下标为 0 的元素变成了 1 ,那么就变成了 1 与 下标为 2 的元素进原创 2022-07-07 16:32:22 · 235 阅读 · 0 评论 -
【算法】桶排序算法的讲解和代码实践
桶排序的思想同归并排序一样,也是基于分治法来加快排序的速度的。主要思想就是把整个数组按范围放到不同的桶中,各个桶各自进行排序,每个桶都排好序之后,整个数组的排序也就完成了。 思路: 1、确定桶的个数和每个桶的范围; 2、将数组分配到桶中; 3、桶内进行排序(可以继续使用桶排序,但一般会采用其他排序算法); 4、从桶中取出排好序的数。有数组如下: 加入分配5个桶,分别是[1, 20)、[20, 40)、[40,60)、[60,80)、[80,99): 然后给数字进行入桶: 将桶中的数字进行排序: 将数原创 2022-07-07 16:17:03 · 221 阅读 · 0 评论 -
【算法】基数排序算法的讲解和代码实践
基数排序也是三个桶排序算法之一,排序过程也是不需要进行比较。 基数排序的主要思路是: 1、先按个位数不同,把数组中所有元素放到0~9这10个不同的桶中; 2、从桶中按先入先出的顺序取出数据,此时数组个位数已经有序,再按照十位,放入桶中; 3、再取出,直到所有位数到进过桶,就完成了整个数组的排序。 另外说明一下计数排序的适用场景: 1、因为是按位数进行排序的,所以只能排正整数; 2、数组中的元素间隔越小越好。比如如果有一个数组是[1, 2, 111111111],这样虽然只有一个数有9位,但是所有数都要跟着入原创 2022-06-28 14:26:47 · 210 阅读 · 0 评论 -
【算法】计数排序算法的讲解和代码实践
计数排序是三个桶排序算法之一(计数排序、基数排序、桶排序),是不需要通过比较就可以对数组进行排序的一种算法。 计数排序的主要思路是: 1、新建一个数组,数组长度为原数组中最大的元素 + 1; 2、遍历原数组,将新数组下标等于原数组当前元素的值 + 1,也就是计数了; 3、遍历新数组,按下标依次取出所有元素值不为0的所有下标,并且元素值为几就取几次; 4、全部取出来就是排好序的数组。 另外说明一下计数排序的适用场景: 1、因为是使用数组下标 = 原数组值的形式计数的,所有原数组中的元素只能是大于等于0的数;原创 2022-06-27 13:13:50 · 225 阅读 · 0 评论 -
【算法】堆排序算法的讲解和代码实践
学习堆排序之前,先简单介绍一下什么是堆。 但是要了解堆,还得先连接二叉树。 二叉树,就是每个节点最多有两个子节点的树形的数据结构。二叉树又有完全二叉树、满二叉树等等,细的就不讲了,可以搜一下资料,还是很多讲这个的。 二叉堆,它是属于完全二叉树,同时它又满足堆的性质(子节点的值总是小于它的父节点(也可以是大于))。也就是说,根节点肯定是最大(也可能是最小)的那个元素。 堆排序就是根据这个特点,把数组看成是一个二叉堆,每次计算出一个最大或最小值然后进行排序的。 那么完全二叉树它怎么跟数组关联上呢?其实完全二叉树原创 2022-06-03 21:04:12 · 121 阅读 · 0 评论 -
【算法】希尔排序算法的讲解和代码实践
希尔排序,与其他排序不同的是,别的排序都能通过名字关联上,而希尔排序的名字,怎么看也不太像中文。 其实希尔排序就是插入排序的进化版,它会先声明一个间隙参数,然后按照间隙参数,把数组分成若干各子数组,对子数组进行插入排序。随着间隙越缩越小,整个数组的顺序也就慢慢排好了。 看起来不太容易理解,下面就拆开说一下步骤:有数组如下: 现在要对它进行希尔排序。首先计算出一个间隙值gap,我们用数组长度除以2,计算出第一个gap:8 / 2 = 4; 那么间隔为4(比如下标为0的元素,加4,即下标为4的元素,两个元素看原创 2022-06-03 20:19:05 · 141 阅读 · 0 评论 -
【算法】选择排序算法的讲解和代码实践
思路 选择排序,顾名思义,就是每次选出一个最小或最大的数,移动位置,直到整个数组完成排序。 有数组[26, -3, 14, -15, 0, 324, 98, 1, 22] 现对该数组进行排序,使用选择排序算法。 先来屡一下思路和步骤: 选出整个数组最小的数,记录它的下标; 将它和未排序的最左边数组进行交换(交换过就是排序了); 直至整个数组排序完成。 讲解 首先声明出待排序下标、最小值和最小下标。最小值我们使用Integer.MAX_VALUE,来确保数组中肯定有值能够被排序: 然后通过遍历,找到从待原创 2022-05-24 12:16:17 · 133 阅读 · 0 评论 -
【算法】插入排序算法的讲解和代码实践
思路 有数组[26, -3, 14, -15, 0, 324, 98, 1, 22] 现对该数组进行排序,使用插入排序算法。 先来屡一下思路和步骤: 从下标为1的元素开始进行遍历; 如果它前面的元素比它大,那么将前面的元素进行后移,并记录下标; 直至遇见小于等于它的数,将当前元素插入上面记录的下标中。 讲解 第一步,记录当前元素(从下标为1的元素开始),即 -3;插入下标初始化为 -1。 第二步,将 -3 前面的所有元素与 -3 进行对比,大于 -3 的,进行后移,并将后移元素的下标赋值到插入下标中:原创 2022-05-22 14:30:16 · 250 阅读 · 0 评论 -
【算法】快速排序算法的讲解和代码实践
思路 有数组[26, -3, 14, -15, 0, 324, 98, 1, 22] 现对该数组进行排序,使用快速排序算法。 先来屡一下思路和步骤: 选出基准数; 小于基准数的,放在基准数左边,大于基准数的,放在基准数右边; 以基准数为分隔,左右两边的子数组继续进行排序(迭代); 直至整个数组排序完成。 讲解 下面上图: 原数组如下: 先选出一个基准数,比如我们先选 0 为基准数,那么用数组中的数挨个去跟 0 做对比,小的放左边,大的放右边: 经过了第一次的调整,以 0 为基准,现在就分成了小于 0原创 2022-05-19 17:49:42 · 204 阅读 · 0 评论 -
【算法】归并排序算法的讲解和代码实践
思路 有数组[2, 1, -3, -15, 25, 16, 0, 8]如下: 现对该数组进行排序,使用归并排序算法。 先来讲解一下归并排序的思路,大概分为如下几个步骤: 先将原数组先进行拆分,拆分成若干个足够小的子数组; 将子数组进行排序; 将子数组一一进行归并,直到所有子数组被归并。 讲解 OK,思路了解了,下面就用图示来演示一下各个步骤是怎么做的。 1. 先将原数组先进行拆分,拆分成若干个足够小的子数组: 我们先把上面的数组进行第一次拆分: 拆分成了两部分,分别为[2, 1, -3, -15]和原创 2022-05-17 14:35:14 · 300 阅读 · 0 评论