
排序算法
Foools
这个作者很懒,什么都没留下…
展开
-
堆排序(java)
堆排序时间复杂度O(nlogn),不稳定排序。堆是具有一下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;每个节点的值都小于或等于左右孩子节点的值,称为小顶堆。(不要求左右孩子节点的大小关系)大顶堆特点:arr[i] >= arr[2i+1] && arr[i] >= arr[2i+2]小顶堆特点:arr[i] <= arr[2i+1] && arr[i] <= arr[2i+2]升序使用大顶堆,降序使用小顶堆i是原创 2021-03-24 20:59:11 · 123 阅读 · 0 评论 -
基数排序(java)
基数排序将整数按照位数切割成不同的数字,按每个位数分别比较。基数排序是稳定的(大小相同的两个数,排序完成之后靠前的那一个仍然在前面)思想:基数排序是依靠空间来交换时间的一种排序,一般我们会设置数据桶为一个二维数组。找到数组中最大的数并查看它的位数按照个位,十位,百位这样for循环,分别进行排序将序列中每个元素取出,放入对应的桶中遍历每个桶,将桶中的数据放入到原数组。统计完成后,要将桶清空。代码实现:package com.sortAlgorithm;import原创 2021-03-17 20:38:08 · 125 阅读 · 0 评论 -
归并排序(java)
归并排序利用分治策略,将大问题分为小问题递归进行求解。基本思想:合并相邻有序子序列的过程思路分析:一般来说先写一个分解的函数,再写一个合并的函数。分解函数判断是否left<right,如果是的话进行计算mid操作之后,完成左边的分解和右边的分解。在完成分解之后进行一次合并合并函数把左右两边的数据按照规则填充到temp数组,直到有一边序列填充完毕了。i<mid,j<right的前提下:左右进行比较,小的移动到temp中移动之后,被移动的数组中的索引加一,t原创 2021-03-17 20:37:19 · 132 阅读 · 0 评论 -
快速排序(java)
快速排序通过一趟排序将要排序的数字分割成独立的两部分,其中一部分的数据比另一部分所有数据都小,然后再对这两组数据进行排序,整个排序过程递归进行。package com.sortAlgorithm;import java.util.Arrays;public class quickSort { public static void main(String[] args){ int[] arr = {-9,78,0,23,-567,70,-1,900,4561};原创 2021-03-17 20:35:30 · 173 阅读 · 0 评论 -
插入排序法(java)
插入排序法属于内部排序法,是对于欲排序的元素以插入的方式寻找元素的适当位置,以达到排序的目的。排序方法为把n个待排序的元素看成一个有序列表和一个无序表,开始时有序表中只包含1个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的序码依次与有序元素的排序码相比较,将它插入到有序码中适当位置,使之成为新的有序表。代码实现:package com.sortAlgorithm;public class insertSort { public static void ma原创 2021-03-17 20:34:54 · 121 阅读 · 0 评论 -
选择排序法(java)
选择排序法介绍:从长度为n的序列中,找到最小的数字,将这个数字放到指定的位置,执行n-1次,实现排序。思路:一共有n-1轮排序(数组大小为n)每一轮排序都是一个循环假定当前数字为最小值这个数与后面的数进行比较,如果有更小的数,则用更小的数替代当前的数作为最小值遍历结束,将最小值与序列中未排序位置的数字进行交换代码package com.sortAlgorithm;public class selectionSort { public static void main原创 2021-03-17 20:34:10 · 131 阅读 · 0 评论 -
冒泡排序(java)
冒泡排序按照排序序列从前向后,依次比较相邻元素的值,若发现逆序则交换,使较大的元素移动到序列的尾部。优化:如果发现某次排序没有进行过交换,则证明当前为排序完成的序列,设置一个flag来判断元素是否进行过交换,从而减少不必要的比较。一般来说,会进行n-1次大的循环每一趟排序的次数从n-1次开始减小发现某次循环中序列的顺序没有发生变化,则直接退出程序代码实现:package com.sortAlgorithm;public class bubbleSort { public st原创 2021-03-17 20:33:34 · 109 阅读 · 0 评论