
算法
文章平均质量分 51
JackeyJobs
将编程变成兴趣
展开
-
Leetcode算法题逐一击破—No.001
[每日一道算法题] # 题号:001 # 题名:两数之和 # 难度:简单 题目描述: 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应 一个 答案。但是,数组中同一个元素 不能使用两遍。 你可以按 任意顺序 返回答案。 解题思路(一): 双层循环遍历数组,在数组中寻找target - nums[i],找到时输出两数的下标 解题代码: class Solution { pub原创 2021-01-05 15:24:15 · 182 阅读 · 0 评论 -
排序算法之计数排序
[非比较排序-计数排序] 1.算法思想 计数排序要求数据必须是有确定范围的整数 需要定义一个新的数组,用于存放原数组中元素的个数 2.流程分析 直接上例子:int[] array = {12, 9, 3, 7, 5, 8, 5} 先循环遍历array数组,获取数组元素中的最大值[12]和最小值 [3] 定义一个新的数组bucket,长度为[最大值 - 最小值 + 1] = 10 调用Arrays.fill(bucket, 0)将bucket中的所有元素用0填充,用于计数 bucket:{0,0,0,原创 2020-12-27 00:58:33 · 241 阅读 · 4 评论 -
排序算法之选择排序
[选择排序]简单选择排序 1.算法思想: 按数组顺序依次选定一个元素作为比较值,遍历数组,找出最小值,与比较值交换 2.流程分析: 直接上例子:int[] array = {3, 2, 10, 4, 8, 5, 7, 9, 6, 1} 以 array[0] = 3 作为比较值,记录下标minIdx = 0 遍历array[1]~array[9],与3比较 array[1]=2<3,然后更新minIdx = 1 array[9]=1<2,更新minIdx = 9 交换array[9]、arr原创 2020-12-23 17:13:20 · 97 阅读 · 0 评论 -
排序算法之希尔排序
[插入排序-希尔排序] 前言(不重要):希尔排序是希尔这个人提出的,又名缩小增量排序,是改进版的插入排序 1.算法思想 优先比较距离远的元素,将数组元素拆分之后再进行插入排序 以length/2作为增量n,比较a[i + n]、a[i],若a[i + n]较小,交换a[i + n]与a[i] 缩小增量n /= 2 ,比较a[i + n]、a[i]、a[i - n]…,若a[i + n]比其他都小,则提到最前面 当n = 1时,即对整个数组进行插入排序 2.流程分析 直接上例子:int[] a = {6原创 2020-12-23 16:57:14 · 90 阅读 · 0 评论 -
排序算法之插入排序
[插入排序-普通插入排序] 1.算法思想 将元素a视为基序列,遍历数组将元素a右边的元素依次插入序列中,找到比自己小的数置于其后,保证序列一直处于已排序的状态。 2.流程解析 将元素a作为基序列 向序列中插入元素b,比较a、b 若b < a,将a向后移动一个位置,b赋值给a,序列:[b、a] 若b > a,则不变 插入元素c,比较c与a、b 若c < b < a,将b后移,a后移,c前置,序列:[c、b、a] 若b < c < a,将b后移,a不变,原创 2020-12-23 16:09:31 · 110 阅读 · 0 评论 -
排序算法之快速排序
[交换排序-快速排序] 1.算法思想: 选择一个元素作为基准,先从右向左遍历数组寻找比基准小的数a,然后从左向右寻找比基准大的数b,交换a和b的值,当左右会面时,与基准数交换值。目的是让基准数处于数组中间位置 可以将基准理解为分数线,选取60作为及格线,通过左右交换的方式确定左边都是不及格的元素,右边则都是及格的元素,然后对不及格和及格部分再进行细分,例如及格可以分为优和良,以90和70作为基准;不及格可以分为中和差,以50和30作为判断基准,将元素置于对应的区间内。 2.流程解析 定义数组:int[]原创 2020-12-23 15:15:40 · 396 阅读 · 6 评论 -
深入理解排序算法
用最通俗易懂的语言,深入解读排序算法 **前言:**什么是排序,算法又是什么? 排序:将杂乱无章的数据元素,通过一定的方法按关键字顺序排列的过程叫做排序。目的是将一组“无序”的记录序列调整为“有序”的记录序列,比如说升序、降序、奇偶排序(奇升偶降、奇降偶升)等。 算法(Algorithm):是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令。代表着用系统的方法描述解决问题的策略机制。一个算法的优劣可以用空间复杂度与时间复杂度来衡量,常用的算法有递推法、递归法、穷举法、贪心算法、分治法、动态规原创 2020-12-17 17:41:14 · 358 阅读 · 0 评论 -
排序算法之冒泡排序
[交换排序-冒泡排序] 1.算法思想 相邻元素进行数值比较,当前一个元素大于后一个元素时,交换两个元素的值,每次遍历都能将最大的值置于数组末尾。 2.流程解析 定义int型数组array,包含10个元素 int[] array = {85, 88, 47, 13, 54, 4, 34, 6, 78, 48}; 定义int型变量i,表示数组下标 int i = 0; //初始值为0,(i >= 0 且 i < 10 ) 循环遍历数组,若array[i] > array[i + 1],交原创 2020-12-23 12:59:51 · 137 阅读 · 2 评论