安静写算法
文章平均质量分 52
安静写算法
风轻扬777
继续不为什么的坚持,终得自由选择的时空
展开
-
0-1背包问题的回溯算法
0-1背包算法的突破口原创 2023-01-30 10:31:58 · 172 阅读 · 0 评论 -
java实现二叉树的删除节点操作
java实现二叉树的删除节点操作原创 2022-06-12 16:24:43 · 861 阅读 · 0 评论 -
一个使用快排结合桶排的排序案例
快排+桶排原创 2022-06-05 13:27:02 · 125 阅读 · 0 评论 -
二分搜索的时间复杂度分析
先贴上二分查找的java代码实现public static int binarySearch(int[] a,int n,int value){ int low = 0; int high = n - 1; while (low <= high) { int mid = (low + high) >> 1; if (a[mid] == value) { retu原创 2022-05-13 14:10:33 · 2444 阅读 · 0 评论 -
Collections.sort是稳定排序吗?
Collections.sort的实现原创 2022-05-03 12:21:06 · 1408 阅读 · 0 评论 -
O(n)时间复杂度内,查找数组中第K大元素
这个题目,是《极客时间》的算法专栏中的一个练习题。我觉着这个题挺有意思,而且感觉也有一定的实战意义。把专栏中的解法摘抄了下来,在ide中运行了一下,运行通过。这个题的意思是这样的。假设有一个数组[2,3,1,7,5,6],我们要找它的第3大元素,应该是数字3。但是这个题,还有以一个限制,算法的复杂度是O(n)。这就意味着冒泡、直接排序的算法就不行了。这里借鉴了快速排序算法中的分区算法。看一下代码实现/** * search Nth element in array. */public class S原创 2022-03-15 13:43:24 · 894 阅读 · 0 评论 -
冒泡排序的执行流程
上学学计算机的时候,最开始学排序的时候,应该都是先学的这个算法吧。很经典。先从字面上了解一波这个算法,我们日常生活中会见到很多冒泡的场景。烧开的水其实就很形象,气泡是一个接着一个冒出来的。冒泡排序的过程其实和这个过程就很相似。我从网上找了一个动图,很直观。动图来源:https://www.cnblogs.com/fivestudy/p/10064969.html看一下java代码的实现public class BubbleSortSolution { public static void m原创 2022-02-25 13:13:29 · 675 阅读 · 1 评论 -
选择排序的执行流程
选择排序,顾名思义,选择然后进行排序,这个算法的核心思想就是从未排序区间中选择较小的元素添加到已排序区间的末尾。我在网上找了一个动图,看着挺直观的,大家可以看一下。动图来源:https://www.cnblogs.com/fivestudy/p/10064969.html可以看到每次排序,都会从未排序区间中找出最小的元素添加到已排序区间的末尾。java实现public class SelectSortSolution { public static void main(String[] a原创 2022-02-24 21:32:55 · 664 阅读 · 0 评论 -
希尔排序的执行流程
在上一节,我们聊了一下插入排序算法,这种算法每次比较,都需要移动元素,给待插入数据腾位置,如果我们大部分的数据都是有序的,只有一个数据无序且最小并处于数组末端,我们移动这个小元素前面的数据其实没有任何意义。由此,诞生了希尔排序(也叫递减增量排序),希尔排序就是为了解决插入排序大量移动元素的问题。希尔排序的思路是:初始化一个gap变量,每次跳跃gap步长进行元素比较。一轮比较之后,gap下标左边的元素和gap右边的元素大体上都有序了。我们举个例子:8,7,2,9,6,1第一轮比较,gap = (arra原创 2022-02-21 13:23:37 · 551 阅读 · 0 评论 -
插入排序的执行流程
插入排序,从该算法的名字中也可以看出,这种算法会有插入操作,如果我们用数组作为底层的数据结构实现该算法的话,进行插入操作,需要移动现有元素,空出位置后,才能进行插入操作。插入排序的排序思路,主要就是将未排序的数据和已排序的数据进行比较,找到较小的元素后,移动到已排序区间中。插入排序是原地排序算法,也可以是一种稳定排序算法(如果元素相等,我们将后来的相等元素添加到已排序区间的末尾即可)。插入排序在实战中用的很少,主要原因是这种算法可能会演变成O(n²)。下面,我们看一下java的实现public stati原创 2022-02-21 12:52:28 · 573 阅读 · 0 评论 -
归并排序java代码实现
归并排序,是一种分治算法。利用递归,将一个大的数据集合分解成小的子集合。将子集合排好序后,再合并起来。归并排序不是原地排序算法,因为它使用到了临时空间,这也是归并排序没有快速排序应用广泛的主要原因,虽然归并排序的时间复杂度,最好、最坏都是O(logn)。但是,这个也看使用场景,如果在空间换时间的场合,个人认为这种算法也有一定的用武之处。下面看一下java的代码实现public static void main(String[] args) { int[] arr = new int[]{1原创 2022-02-20 21:43:32 · 1345 阅读 · 1 评论 -
快速排序的详细执行流程
快速排序是一种非常常用的排序算法,由于其平均时间复杂度绝大多数时候是O(logn),并且是一种原地排序的算法,所以在面对大数据量的排序需求时,是我们的常用选择。快速排序的基本思想是这样的:从待排序数据集中找到一个pivot(分区点),之后将小于pivot的数据移动到pivot的左边,将大于pivot的数据移动到pivot的右边。重复该动作,直到pivot左右的数据集大小为1后终止。这个算法最核心的部分是分区点的选择。为了保证原地排序,分区函数不能引入额外空间先贴一下java代码的实现class Qui原创 2022-02-19 17:04:33 · 1862 阅读 · 0 评论