排序
篱落雨沫
这个作者很懒,什么都没留下…
展开
-
[ 算法 ]-- 直接插入排序,Java实现
直接插入排序: 在一个已经有序的序列中插入一个新的数,使得插入之后的序列依然有序。 插入排序的基本思想是将一个数插入到已经有序的序列中,得到一个新的、个数加一并且依然有序的序列。 基本实现思路: 对于给定的元素个数为n的数组,已知只有一个元素的数组一定有序,即将第一个元素自动看成一个有序数组,其余的元素为无序;从第二个元素开始到第n个元素,依次向有序序列中执行直接插入操作,得到有n个元素的...原创 2019-07-24 17:32:33 · 183 阅读 · 0 评论 -
[ 算法 ] -- 希尔排序,Java实现
希尔排序: 希尔排序又称为缩小增量法,是对直接插入排序算法的最坏情况的优化。 实现过程: 先将数据分成不同的组,对每一组进行排序,然后再对所有元素进行一次插入排序,减少数据交换和移动的次数。 在进行希尔排序时,要先知道数组的长度,根据长度确定步长大小。 当步长为1时,采用直接插入排序。 具体实现由下图所示: 时间复杂度: 希尔排序的时间复杂度与增量(步长len)的选取有关。 ...原创 2019-07-25 11:21:31 · 151 阅读 · 0 评论 -
[ 算法 ] -- 选择排序,Java实现
选择排序: 每次从待排序的数据元素中选出最小(或最大)的元素,存放在起始位置,直到全部待排序的数据全部排完。 实现思路1:每一趟排序,j = i + 1;当arr[j]<arr[i],交换,否则不交换 实现思路2:先选出待排序数据中的最小元素,再进行交换 时间复杂度:O(n^2) 空间复杂度:O(1) 选择排序是不稳定的排序 思路1代码实现: import java...原创 2019-07-25 18:12:10 · 173 阅读 · 0 评论 -
[ 算法 ] -- 快速排序(递归、非递归、优化),Java实现
快速排序思想: 快速排序使用“分而治之”的思想,在待排序的元素中选取某一元素作为基准值,通过一趟快速排序将待排序序列分割成两部分,基准值左边部分的所有元素均小于基准值,右边部分的所有元素均大于基准值,之后分别对这两部分重复上述过程,直到所有元素排在相应位置,即完成本次快速排序。 时间复杂度:平均:O(n*logn);最坏:O(n^2) 空间复杂度:O(log n),最坏:O(n)-->...原创 2019-07-27 11:03:57 · 543 阅读 · 0 评论 -
[ 算法 ] -- 归并排序,Java实现
归并排序基本思想: 归并排序是建立在归并操作上的一种有效的排序算法,采用“分治”思想。 归并排序将已经有序的子序列合并成一个序列,得到的序列完全有序; 二路归并:将两个有序表合成一个有序表 归并排序的特点: 时间复杂度:O(n*logn) 空间复杂度:O(n) 稳定性:稳定 归并排序的步骤: 1. 分解:将待排序的序列平均分解成两个元素个数相同的子序列; 2. 合并:合并两个有序...原创 2019-08-05 19:53:00 · 131 阅读 · 0 评论 -
[ 算法 ] -- 堆排序,Java实现
堆的基本概念: 堆是一棵所有元素按完全二叉树的顺序存储方式存储的完全二叉树。 堆的性质: --堆中某个节点的值总不大于或不小于其父节点的值; --堆总是一棵完全二叉树。 小根堆:每个节点的值小于等于左、右孩子的值(根节点最小的堆) 大根堆:每个节点的值大于等于左、右孩子的值(根节点最大的堆) 父节点 n ==&g...原创 2019-08-23 23:38:38 · 273 阅读 · 0 评论