数据结构和算法学习之旅
文章平均质量分 75
详细介绍了几种经典的排序算法的Java实现
字节卷动
字节卷动 | CSDN博客专家
博客知识包括:Android、ASM、OpenGL、C++、Java、Python、Shell、Jenkins、Gitlab、Git、SVN等相关进阶知识。
展开
-
【Android面试八股文】荣耀面试算法题: 输出一个给定的字符串的最长回文子序列及其长度!
具体来说,如果我们想求。原创 2024-07-30 01:35:04 · 863 阅读 · 0 评论 -
【Android面试八股文】荣耀面试算法题:输出所有的水仙花数
要输出所有的水仙花数,我们需要先了解什么是水仙花数。水仙花数(Narcissistic number),也称为自恋数、自幂数、阿姆斯特朗数,是指一个 n 位的正整数,其各个位上的数字的 n 次方之和等于它本身。原创 2024-07-30 00:26:27 · 585 阅读 · 0 评论 -
【Android面试八股文】荣耀面试算法题:输出1到1000中间有多少个素数?
素数又称质数。指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数。比1大但不是素数的数称为合数。1和0既非素数也非合数。原创 2024-07-30 00:12:38 · 866 阅读 · 0 评论 -
【Android面试八股文】荣耀面试算法题:输入一个N阶方阵(0<N<10),输出此方阵顺时针旋转M(0<=M<=10000)次后的方阵
由于方阵的旋转次数可能非常大(最大为10000次),我们可以简化问题,通过观察和计算,来减少不必要的计算步骤。要解决这个问题,我们需要实现一个功能,将给定的N阶方阵顺时针旋转M次。我们通过一个具体的示例来展示这段代码如何将一个矩阵顺时针旋转90度。(2) 接下来输入方阵的数据,输入N行,每行N个整数用空格分开。(1) 输出旋转后的数据,共计N行,每行N个整数,用空格分开。(1) 第一行输入一个正整数N (0<N<10)题目示例:三阶方阵,围绕方阵中心顺时针旋转。说明:不用考虑异常输入,所有输入都是正常的。原创 2024-07-20 23:18:25 · 209 阅读 · 0 评论 -
【Android面试八股文】请你编写一个函数,找到单向链表的中间节点。如果链表有偶数个节点,则返回中间偏右的那个节点。你可以使用 Java 或 Kotlin 来回答。
请你编写一个函数,找到单向链表的中间节点。如果链表有偶数个节点,则返回中间偏右的那个节点。我的思路是先遍历链表得到它的长度,然后再次遍历一半的长度到达中间节点。你能解释一下如何处理边界情况吗,例如链表为空或者只有一个节点的情况?你对这个问题的理解非常深入。我刚刚的这种方法虽然直观,但需要两次遍历链表,时间复杂度是 O(N),,循环条件不满足,函数会直接返回这个唯一的节点,这也是正确的。然后再次遍历一半的长度找到中间节点。听起来不错,请继续你的代码。我先遍历链表获得它的长度,好,请开始你的代码。原创 2024-06-13 12:05:23 · 11 阅读 · 0 评论 -
我的Java开发学习之旅------>Java经典排序算法之冒泡排序
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。一、算法原理 冒泡排序算法的运作如下:1、比较相邻的元素。如果第一个比第原创 2015-06-18 02:02:52 · 2526 阅读 · 2 评论 -
我的Java开发学习之旅------>Java经典排序算法之选择排序
一、算法原理对比数组中前一个元素跟后一个元素的大小,如果后面的元素比前面的元素小则用一个变量k来记住他的位置,接着第二次比较,前面“后一个元素”现变成了“前一个元素”,继续跟他的“后一个元素”进行比较如果后面的元素比他要小则用变量k记住它在数组中的位置(下标),等到循环结束的时候,我们应该找到了最小的那个数的下标了,然后进行判断,如果这个元素的下标不是第一个元素的下标,就让第一个元素跟他交换一原创 2015-06-18 12:11:57 · 1909 阅读 · 0 评论 -
我的Java开发学习之旅------>Java经典排序算法之插入排序
所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。二、算法描述1、从第一个元素开始,该元素可以认为已经被排序。2、取出下一个元素,在已经排序的元素序列中从后向前扫描。3、如果该元素(已排序)大于新元素,则将该元素移到下一位置。4、重复步骤3,直到找到已排序的元素小于或者大于新元素的位置。5、将新元素插入到原创 2015-06-18 14:37:11 · 1616 阅读 · 0 评论 -
我的Java开发学习之旅------>Java经典排序算法之希尔排序
一、希尔排序(Shell Sort)希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名。Shell排序又称作缩小增量排序。二、希尔排序的基本思想希尔排序的中心思想就是:将数据进行分组,然后对每一组数据进行排序,在每一组数据都有序之后 ,就可以对所有的分组利用插入排序进行最后一次排序。这样可以显著减少交换的次数,以达到加快排序速度的原创 2015-06-19 01:08:47 · 2364 阅读 · 1 评论 -
我的Java开发学习之旅------>Java经典排序算法之二分插入排序
一、折半插入排序(二分插入排序)将直接插入排序中寻找A[i]的插入位置的方法改为采用折半比较,即可得到折半插入排序算法。在处理A[i]时,A[0]……A[i-1]已经按关键码值排好序。所谓折半比较,就是在插入A[i]时,取A[i-1/2]的关键码值与A[i]的关键码值进行比较,如果A[i]的关键码值小于A[i-1/2]的关键码值,则说明A[i]只能插入A[0]到A[i-1/2]之间,故原创 2015-06-24 14:35:09 · 3711 阅读 · 2 评论 -
我的Java开发学习之旅------>Java经典排序算法之快速排序
一、算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。(1) 分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。(2)快速排序的原创 2015-06-24 16:24:14 · 1636 阅读 · 0 评论 -
我的Java开发学习之旅------>Java经典排序算法之归并排序
一、归并排序归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并过程为:比较a[i]和a[j]的大小,若a[i]≤a[j],则将第一个有序表中的元素a[i]复制到r[k]中,原创 2015-06-24 18:33:44 · 1885 阅读 · 0 评论