
十大排序算法
12345sdfad
新手码农一只
展开
-
十大排序—堆排序
文章目录1. 堆排序1.1 算法思想1.2 算法步骤1.3 复杂度分析2. 代码实现2.1 Java版 1. 堆排序 1.1 算法思想 堆排序是指利用堆这种数据结构所设计的一种排序算法,堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 1.2 算法步骤 将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区; 将最大的数与最低端数交换并排除,此时得到了一个最值数; 重复步骤1、2,直至只剩最后一个数。 1.3 复杂度分析 堆排原创 2021-08-25 10:19:34 · 115 阅读 · 0 评论 -
十大排序—快速排序
文章目录1. 快速排序1.1 算法思想1.2 算法步骤1.3 复杂度分析2. 代码实现2.1 Java版 1. 快速排序 1.1 算法思想 通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 1.2 算法步骤 从数列中挑出一个元素,称为 “基准”;(一般选第一个) 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中原创 2021-08-25 10:15:02 · 108 阅读 · 0 评论 -
十大排序—冒泡排序
文章目录1. 冒泡排序1.1 算法思想1.2 算法步骤1.3 复杂度分析2. 代码实现2.1 Java版 1. 冒泡排序 1.1 算法思想 它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。一次遍历下来最大(小)的数已经跑到最后,因此确定了一个数,最多遍历n次可完成排序。 1.2 算法步骤 比较相邻的元素。如果第一个比第二个大(小),就交换它们两个; 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大(小)的数; 针对所有的元素重复以上原创 2021-08-25 10:08:19 · 75 阅读 · 0 评论 -
十大排序—归并排序
文章目录1. 归并排序1.1 算法思想1.2 算法步骤1.3 复杂度分析2. 代码实现2.1 Java版 1. 归并排序 1.1 算法思想 采用分治方法将原序列分治为logN个长度为2的子序列,然后排序并合并。核心是使得每个子序列有序,再使得子序列间有序。 1.2 算法步骤 把长度为n的输入序列分成两个长度为n/2的子序列; 对这两个子序列分别采用归并排序,即重复步骤1,2直至n等于1; 将两个排序好的子序列合并成一个最终的排序序列。 1.3 复杂度分析 因为分治算法基于选择算法,因此最好最坏情况的时间原创 2021-08-25 10:04:09 · 83 阅读 · 0 评论 -
十大排序—选择排序
文章目录1. 选择排序 (Select Sort)1.1 算法思想1.2 算法步骤1.3 复杂度分析2. 代码实现2.1 Java版 1. 选择排序 (Select Sort) 1.1 算法思想 选择排序是表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度 ,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推原创 2021-08-25 09:59:09 · 66 阅读 · 0 评论 -
十大排序—希尔排序
1. 希尔排序 1.1 算法思想 希尔排序也是一种插入类排序,它之所以更快是因为它在最开始就将较远的两个数进行了排序,排除了较小的数在后面需要比较多次的情况,其使用二分法选择比较长度,因此其时间复杂度能降低到O(NlogN)。 1.2 算法步骤 选择一个增量K(一般为len/2),得到k个增量序列; 对序列进行k 趟插入排序; 将增量缩小到k/2 ,重复步骤1,2直至增量为1 1.3 复杂度分析 可以看出,希尔排序时间复杂度的下界是(Nlog(N)^2),平均时间复杂度也为O(Nlog(N)^2),空间原创 2021-08-25 09:51:34 · 101 阅读 · 0 评论 -
十大排序—直接插入排序
文章目录1. 直接插入排序1.1 算法思想1.2 算法描述1.3 复杂度分析2. 代码实现2.1 Java 1. 直接插入排序 1.1 算法思想 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 1.2 算法描述 从第一个元素开始,该元素可以认为已经被排序; 取出下一个未排序元素,在已经排序的元素序列从后向前扫描; 将已排序元素和取出的未排序元素进行比较,不符条件则将该元素移到后一位置; 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置; 将新元素插入到该位置后;原创 2021-08-25 09:44:14 · 137 阅读 · 0 评论