数据结构
∝ 1 颗心╮
Java
展开
-
Java排序汇总
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:名词解释:n:数据规模k:“桶”的个数In-place:占用常数内存,不占用额外内存Out-place:...转载 2019-04-21 21:28:00 · 105 阅读 · 0 评论 -
Java排序之选择排序
选择排序算法原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和duip堆排序只介绍常用的简单选择排序)简单选择排序的基本思想:给定数组:int[]arr={里面n个数据};第1趟排序,在待排序数据...原创 2019-04-17 11:03:57 · 88 阅读 · 0 评论 -
Java排序之插入排序
插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。核心算法:一般来说,插入排序都采用in-place在数组上...原创 2019-04-17 22:43:58 · 90 阅读 · 0 评论 -
Java排序之希尔排序
希尔排序(shell sort)这个排序方法又称为缩小增量排序,是1959年D·L·Shell提出来的。该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。然后缩小间隔increment,重复上述子序列划分和排序工作。直...原创 2019-04-19 22:47:44 · 98 阅读 · 0 评论 -
Java排序之归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。根据具体的实现,归并排序包括"从上往下"和"从下往上"2种方式。1.从下往上的归并排序:将待排序的数列分成若干个长度为1的...原创 2019-04-20 09:00:40 · 104 阅读 · 0 评论 -
Java排序之快速排序
快速排序(Quick Sort)使用分治法策略。它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分;其中一部分的所有数据都比另外一部分的所有数据都要小。然后,再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序流程:(1) 从数列中挑出一个基准值。(2) 将所有比基准值小的摆放在基准前面,所有比基准值大的摆在...原创 2019-04-20 10:05:44 · 108 阅读 · 0 评论 -
Java排序之堆排序
堆排序就是利用堆这种数据结构进行排序的算法,堆排序属于选择排序。堆是一棵顺序存储的完全二叉树堆排序的时间复杂度: O(nlogn),属于不稳定排序。堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大根堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小根堆。如下图:同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子...原创 2019-04-20 10:51:31 · 334 阅读 · 0 评论 -
Java排序之冒泡排序
它是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!我们先分析第1趟排序当i=5,j=0时,a[0]<a[1]。此时,不做任何处理!当i=5,j...原创 2019-04-20 15:02:10 · 150 阅读 · 0 评论