数据结构与算法
以java语言为基础实现数据结构与算法
路窑
这个作者很懒,什么都没留下…
展开
-
Java实现堆排序
算法介绍1)堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。2)堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆,注意︰没有要求结点的左孩子的值和右孩子的值的大小关系。3)每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆4)一般升序采用大顶堆,降序采用小顶堆基本思想(升序排列)1)将待排序序列构造成一个大顶堆2)此时,整个序列的最大值就是堆顶的根节点。3)将其原创 2021-06-16 18:37:23 · 344 阅读 · 0 评论 -
Java实现基数排序(桶排序)
算法介绍1)基数排序(radix sort)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)或bin sort,顾名思义,它是通过键值的各个位的值,将要排序的元素分配至某些“桶”中,达到排序的作用2)基数排序法是属于稳定性的排序,基数排序法的是效率高的稳定性排序法3)基数排序(Radix Sort)是桶排序的扩展4) 基数排序是1887年赫尔曼·何乐礼发明的。它是这样实现的:将整数按位数切割成不同的数字,然后按每个位数分别比较。5)基数排序是典型的原创 2021-06-15 16:54:41 · 3216 阅读 · 1 评论 -
Java实现归并排序
算法介绍 归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。从上文的图中可看出,每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。基本思想归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divid原创 2021-06-15 16:21:00 · 2686 阅读 · 1 评论 -
Java实现快速排序
算法简介快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列基本思想1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。代码是以中间值为基值进行快速排序: /**原创 2021-06-15 16:01:33 · 184 阅读 · 0 评论 -
Java实现希尔排序
算法简介希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 简单插入排序很循规蹈矩,不管数组分布是怎么样的,依然一步一步的对元素进行比较,移动,插入,比如[5,4,3原创 2021-06-15 15:34:24 · 188 阅读 · 0 评论 -
Java实现直接插入排序
排序思想插入排序(Insertion Sorting)的基本思想是:把n个待排序的元素看成为一个有序表(有序子数组)和一个无序表(无序子数组),开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。算法实现核心聚焦于找到要插入的位置以及怎样实现插入这个动作代码实现:public class InsertionSort { public static原创 2021-06-12 10:30:08 · 390 阅读 · 0 评论 -
Java实现简单选择排序
基本介绍选择式排序属于内部排序法(在内存中完成排序),是从待排序的数据中,按指定的规则选出某一元素(一般选择无序子数组的首元素),再依规定(从大到小还是从小到大)交换位置后达到排序的目的。排序思想第一次从arr[0]arr[n-1]中选取最小值,与arr[0]交换,第二次从arr[l]arr[n-1]中选取最小值,与 arr[1]交换,第三次从arr[2]–arr[n-1]中选取最小值,与arr[2]交换,…,第i次从arr[i-1]–arr[n-1]中选取最小值,与arrli-1]交换,…,第n-1原创 2021-06-12 10:02:06 · 184 阅读 · 0 评论 -
Java实现冒泡算法及优化冒泡算法
基本思想冒泡排序(Bubble Sort)通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序(前后大小与要求的顺序不一致)则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。代码实现public class BubbleSort { /** * 按照从小到达的顺序进行排序 * @param array 要进行排序的数组 */ public static void bubbleSort(int[] ar原创 2021-06-12 09:38:51 · 2089 阅读 · 0 评论