
算法
水虎
这个作者很懒,什么都没留下…
展开
-
算法笔记:排序算法-堆排序
排序算法-堆排序方法堆排序是基于大顶堆实现的排序算法。大顶堆就是一颗顺序存储的完全二叉树,并且每一个节点的值都大于自己两个子节点的值。通过定义可以知道,大顶堆的根节点,比所有堆中节点都要大,也就是堆中最大的数。这样一来,只要把一个数组变成大顶堆,那么堆的根节点就是这个数组中最大的数。我们拿到了最大的数,将其从堆中删除并记录这个数,此时堆中所有的数都比记录的这个值小。再次进行调整,让堆再一次变成大顶堆,然后删除堆的根节点并记录。不断重复这个操作,元素记录的顺序就是从大到小的排序。所以,要实现堆排序之前原创 2020-08-29 15:27:49 · 180 阅读 · 0 评论 -
算法笔记:排序算法-快速排序
排序算法-快速排序方法快速排序的主要实现思想是分治。需要在数组中先找到一个基准值,将小于等于基准值的数移动到基准值的左边,将大于等于基准值的数移动到基准值的右边。此时基准值左边的区间中没有比它大的数,右边的区间中没有比基准值小的数。然后我们再对基准值左边和右边的区间分别进行同样的操作。当递归结束后,整个数组就是有序的了。假设数组 arr 有n个无序元素。先将基准值base设为第一个元素arr[0]的值:base = arr[0] ; 然后设置两个指针i,j。i 的初始值为区间的第一个元素,j 的初原创 2020-08-24 11:54:51 · 192 阅读 · 0 评论 -
算法笔记:排序算法-归并排序
排序算法-归并排序方法归并排序是基于归并操作实现的,归并操作比较简单,就是将两个有序的数组合并为一个有序的大数组。实现了归并操作之后,我们就要思考如何将一个大的数组分成两个有序的数组。只要能将一个大的数组变成两个有序数组,就能用归并操作完成排序了。因此,要排序一个数组,我们可以将其不断地拆分,当拆分到两个数组长度为一或零的时候,就可以直接对其进行归并操作了。归并后的数组变得有序,我们就不断将拆分的数组进行归并操作,最终就能得到一个有序的数组了。实现private static int[] aux;原创 2020-08-19 22:40:50 · 291 阅读 · 0 评论 -
算法笔记:排序算法-希尔排序
排序算法-希尔排序方法希尔排序是基于插入排序实现的,之前的博客分析过,插入排序在数组基本有序的时候,也就是倒置元素数量尽可能少的时候效率很高。希尔排序的思想就是,先在整个数组中划分出规模比较小的数组,将这些小的数组先进行插入排序,将小的数组变得有序。在将小的数组变得有序之后,整个数组的倒置元素数量变少了,此时再进行插入排序的效率也变高了。因此我需要先分成若干个规模小一点的数组,进行插入排序,之后再划分成若干个大一点规模的数组进行排序…直到划分成最终一整个数组,这样我们最终就能得到一个有序的数组了。具原创 2020-08-15 16:41:06 · 133 阅读 · 0 评论 -
算法笔记:排序算法-插入排序
排序算法-插入排序方法插入排序的方法就类似于:在斗地主发牌时,一张张牌地拿起并插入到自己手中的牌堆中。假设数组 arr 有n个无序元素。每一次的插入就是在区间 [0,i] 中找到 arr[i+1] 对应的位置并插入。 [0,i] 就相当于我们手中牌堆,arr[i+1] 就相当于下一张要插入的牌。直到没有下一个要插入的数,该数组就变得有序了。第1次将 arr[1] 插入到 [0,0] 区间的正确位置第2次将 arr[2] 插入到 [0,1] 区间的正确位置…第i次将 arr[i] 插入到 [0原创 2020-08-13 01:05:11 · 146 阅读 · 0 评论 -
算法笔记:排序算法-选择排序
排序算法-选择排序方法假设数组有n个无序元素。首先在 [ 0, length-1 ] 中找到最小的元素,并将该元素与数组第 0 位进行交换。然后在 [ 1, length-1 ] 中找到最小的元素,并将该元素与数组第 1 位进行交换。…然后在 [ i, length-1 ] 中找到最小的元素,并将该元素与数组第 i 位进行交换。…最后在 [ length-1, length-1 ]...原创 2020-04-28 13:19:04 · 175 阅读 · 0 评论