随笔分类 - 经典算法
摘要:冒泡排序思想 一样可能需要一副扑克牌。 场景0:现有数组[2,5,3,1,4],求这个数组的从小到大排序后数组表现。 解答方式:类似插入排序,只不过相对来说冒泡的表现更差但也更容易理解。同样分为两个数组,左边的数组为原数组$[2,5,3,1,4],右边的数组为[]\(,也就是空数组,但也
阅读全文
摘要:选择排序 与冒泡类似,时间复杂度也是相同,但其中关键点在于记住索引。 场景0:现有数组[2,5,3,1,4],求这个数组的从小到大排序后数组表现。 解决思路:依次确保第n个位置所在元素是前n个元素中最大的即可。 2 < 5, 最大值为5,索引值为1。 5 > 3, 5 > 1, 5 > 4。最大
阅读全文
摘要:归并排序 归并排序的核心思想是分而治之(Devide And Conquer)。将大问题拆分成子问题,分别对子问题进行求解之后,并将所有的子问题的解合并之后即可。有以下三个解题步骤。分解,解决,合并。 分解。单独一个数肯定是有序的,因此要分解的子问题目的就是分解成一个只含有一个数的数组。第一次分解为
阅读全文
摘要:快速排序 同样采用了分治的思想,但是不同于归并中分解时出现的大小相等的子数组,快速排序分解出来的两个数组长度不一样相等。但在合并过程中也是类似的,同样是有序的数组的合并,不同的是不再是两个子数组之间的排序,而是两数组内部的重排。 快速排序的核心是在数组中任意选定一个值作为标志位x,小于标志的的数组元
阅读全文
摘要:插入排序思想 建议手上有一副扑克牌,会更加好理解。 场景0 :现在有一个数组[2,5,3,1,4],需要按照从小到大的顺序依次排列。 解决方法:明确--只有一个数的数组只有一种排序方式。所以此时可以假定,这个数组分为了两部分,其中一部分时排序为$[2]\(的子数组,此子数组满足从小到大排序的的要
阅读全文