![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
码拉松
这个作者很懒,什么都没留下…
展开
-
Java实现---计数排序
前言计数排序是一种非基于比较的排序方法,在某些特定的场景中,使用计数排序的方式可以实现O(n+k)的时间复杂(k表示待排序的数据范围),比任何基于比较的排序方法都要快。算法分析1、给每一个数都准备一个存放的空间,一般可以用数组来记录。2、然后对待排序的数据进行遍历,记录每一个数出现的次数,并放在对应的数组下标中。3、最后从数组中以此遍历出来即可。图解分析假设原始待排序数据为:6,3,7,5,3,2,5构建一个计数数组,大小等于原始数组取值的范围,假设待排序数据都是正整数,那么对于上面的待排原创 2021-09-26 20:14:06 · 355 阅读 · 0 评论 -
Java实现---堆排序与分析
前言堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;算法分析以大顶堆为例1、先从待排序的数组中构建一个大顶堆,堆的大小即数组的长度。2、然后每次从大顶堆中取出堆顶元原创 2021-03-16 09:24:47 · 111 阅读 · 0 评论 -
Java实现---归并排序与分析
归并排序是一种建立在归并操作上的稳定性算法,是典型分治法的应用,把一个大的集合分成左右两个小的集合,然后分别排序两个小集合,最终再把已经排序好的集合合并成一个大集合。算法分析把一个大集合拆分为两个小集合,再分别对两个小集合进行拆分,直到不能拆分为止,然后对拆分后的小集合进行排序,排序完成后再向上合并,最终合并为一个有序的集合。复杂度分析平均时间复杂度:O(nlogn)空间复杂度:T(n)Java版代码实现public class MergeSort { static int[] ar原创 2020-09-15 14:03:18 · 199 阅读 · 0 评论 -
Java实现---快速排序与分析
快速排序,顾名思义是一种效率较高的排序算法,采用一种分治的思想完成排序。原理取一个数作为基数,然后通过把比基数小的数移动到基数左边,把基数大的数移动到基数右边,然后再按照这个逻辑依次处理左右两边的数据,直到所有完成整个排序过程。分析1、一般使用第一个或者最后一个数作为初始基数。2、设置一头一尾的两个方向坐标,从尾开始的遇到比基数小的就交换,从头开始的遇到比基数大的就交换。3、最后中间数为基数,左边均为比基数小的数,右边均为比基数大的数。4、递归重复上述过程即可。时间复杂度最差情况下为:O(原创 2020-08-25 15:11:28 · 247 阅读 · 0 评论 -
Java实现---选择排序与分析
选择排序是一种非稳定性算法,通过简单的比较方式实现排序。原理第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。分析可以通过两层for循环实现,外层控制遍历每个元素,内层负责从每一次未排序的元素中找到最小(大)的值,然后放到尾部。时间复杂度选择排序中,无论是最好还是最坏情况,都需要比较N=(n-1)+ (n-2)+… +1=n*(n-1)/2次,因此原创 2020-08-24 20:00:37 · 205 阅读 · 0 评论 -
Java实现---插入排序与分析
public class InsertSort { public static void main(String[] args) { int[] arr = {5, 4, 3, 2, 1}; for (int i = 0; i < arr.length - 1; i++) { for (int j = i; j < arr.length - 1; j++) { if (arr[i] > arr原创 2020-08-21 13:42:21 · 261 阅读 · 0 评论 -
Java实现---冒泡排序与分析
冒泡是一种稳定的排序算法,其主要思想就是通过比较相邻两个元素之间的大小,如果前一个比后一个大就交换它们的位置,每一趟比较的过程就向冒泡一样浮到最前端,所以叫他冒泡排序。原理比较相邻两个元素,将较大的元素移到后面。分析要实现这个过程,只需要两个for循环,外层for循环遍历整个数组,内层for循环遍历相邻两个元素的大小,大的交换到后面,外层循环完成一次即表示当前最大的数已经被移到最右边了,外层循环结束,即完成整个排序过程。由此可得,假如有N个数字排序,那么需要N-1趟排序,第 M 趟排序需要比较N-原创 2020-08-20 15:01:44 · 278 阅读 · 0 评论