![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
文章平均质量分 52
快乐的一只小喵喵
这个作者很懒,什么都没留下…
展开
-
Java的排序Arrays.sort和Arrays.parallelSort
Arrays.sort Arrays.sort来对原生数组进行排序,这个API会使用归并排序或者Tim排序( Timsort是结合了合并排序(merge sort)和插入排序(insertion sort)而得出的排序算法,它在现实中有很好的效率)来进行排序。 Timsort的核心过程 1、数组个数小于32的情况使用二分插入排序2、数组大于32时, 先算出一个合适的大小,在...原创 2019-11-18 18:28:56 · 1462 阅读 · 1 评论 -
十大经典排序算法基本思想和图解(冒泡、插入、选择、快速、希尔、堆、归并)
算法分类十种常见排序算法可以分为两大类:1.非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。2.线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。 算法复杂度:图片名词解释:n: 数据规模k:...原创 2018-08-06 19:21:49 · 7990 阅读 · 0 评论 -
Java中for循环嵌套的内循环和外循环
关于for循环嵌套作如下解释: 首先内层循环属于外层循环循环体的一部分,当循环体执行完以后外层循环才进入第二次循环,此过程中内层循环需要执行符合条件的完整循环。(外循环控制行数,内循环控制每一行的个数)下面以冒泡排序为例说明: 第一个(外层)for循环作用:控制排序的轮数 第二个(内层)for循环作用:控制每一轮里的每一个比较步骤 代码:public c...原创 2018-08-05 15:14:25 · 27050 阅读 · 6 评论 -
Java实现经典排序算法----10、基数排序(内含Java代码)
10、基数排序(Radix Sort) 基数排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的,先按低优先级排序,再按高优先级排序。最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。10.1 算法描述取得数组中的最大数,并取得位数; arr为原始数组,从最低位开始取每个位组成radix数组; 对r...原创 2018-08-04 16:35:34 · 586 阅读 · 0 评论 -
Java实现经典排序算法----9、桶排序(内含Java代码)
9、桶排序(Bucket Sort)桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)。9.1 算法描述设置一个定量的数组当作空桶; 遍历输入数据,并且把数据一个一个放...原创 2018-08-04 16:32:04 · 574 阅读 · 0 评论 -
Java实现经典排序算法----8、计数排序(内含Java代码)
8、计数排序(Counting Sort) 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。8.1 算法描述找出待排序的数组中最大和最小的元素; 统计数组中每个值为i的元素出现的次数,存入数组C的第i项; 对所有的计数累加(从C中的第一个元素开始,每一...原创 2018-08-04 16:27:37 · 1435 阅读 · 3 评论 -
Java实现经典排序算法----7、堆排序(内含Java代码)
7、堆排序(Heap Sort) 堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。堆排序详细讲解思想及步骤查看(十大经典排序算法)...原创 2018-08-04 16:22:24 · 725 阅读 · 0 评论 -
Java实现经典排序算法----6、快速排序(内含Java代码)
6、快速排序(Quick Sort)快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。6.1 算法描述快速排序使用分治法来把一个串(list)分为两个子串(sub-lists)。具体算法描述如下:从数列中挑出一个元素,称为 “基准”(pivot); 重新排序数列,所有...原创 2018-08-04 16:20:05 · 6662 阅读 · 3 评论 -
Java实现经典排序算法----5、归并排序(内含Java代码)
5、归并排序(Merge Sort) 归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。 5.1 算法描述 图解归并算法把长度为n的输入序列分成...原创 2018-08-04 16:17:46 · 1158 阅读 · 2 评论 -
Java实现经典排序算法----4、希尔排序(内含Java代码)
4、希尔排序(Shell Sort) 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。4.1 算法描述先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1; 按增...原创 2018-08-04 16:12:45 · 453 阅读 · 0 评论 -
Java实现经典排序算法----3、插入排序(内含JAVA和JS代码)
3、插入排序(Insertion Sort) 插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。3.1 算法描述一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:从第一个元素开始,该元素可以认为已经被排序; 取出下一个元素,在已...原创 2018-08-04 16:10:42 · 1126 阅读 · 0 评论 -
Java实现经典排序算法----2、选择排序(内含Java代码)
2、选择排序(Selection Sort) 选择排序(Selection-sort)是一种简单直观的排序算法。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 2.1 算法描述n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。...原创 2018-08-04 16:02:05 · 1114 阅读 · 0 评论 -
Java实现经典排序算法----1、冒泡排序(内含JAVA和JS代码)
算法分类十种常见排序算法可以分为两大类:1.非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。2.线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。 算法复杂度:图片名词解释:n: 数据规模k:...原创 2018-08-04 15:59:31 · 13836 阅读 · 3 评论