排序算法
what is an object
世界一流cv工程师。我们不生产代码,我们只是代码的搬运工
展开
-
牛客网:拓扑排序
牛客网:拓扑排序原创 2022-06-02 22:49:51 · 152 阅读 · 0 评论 -
8.冒泡排序
冒泡排序的时间复杂度是o(n^2) 冒泡排序的思想: 1.前一个数和后一个数进行比较,如果前一个大于后一个就把前后两个值进行替换 2.每一轮循环结束之后,会找到最大的数,下一轮循环减去最大的数 3.主要就是每一次循环冒泡一个最大数,然后下一次循环剔除最大数,然后再找到第二个最大数 public class BubbleSort { public static void main(String[] args) { int[] arr = {3, 9, -1, 5,原创 2022-03-11 23:47:01 · 77 阅读 · 0 评论 -
7.堆排序
堆排序的时间复杂度是:线性对数阶 o(nlong) 一、大小堆定义 大堆:父节点都大于或等于子节点 小堆:父节点都小于或等于子节点 二、二叉排序树 首先要学习堆排序需要了解二叉排序树 二叉排序树的规律: 1.左子节点的值等于:n*2+1 2.右子节点的值等于:n*2+2 3.第n个元素的父节点的值等于:(n-1)/2 三、堆排序方法执行之前需要将数组调整成大顶堆 思想是: 1.先取出当前的元素临时存起来 2.开始循环,循环开始从左子树开始,就是顺序二叉树左子树规律:k =原创 2022-03-11 23:46:13 · 180 阅读 · 0 评论 -
6.插入排序
插入排序的时间复杂度是:常数阶 插入排序: 1.把数一个一个插入 2.如果插入的数小于插入之前的数,就和前一个数就行替换,一直替换到第一个或者前一个数比 他小 3.找到最小的数之后,把他插入到最小的下标里面去 public class InsertSort { public static void main(String[] args) { int[] arr = {1, 2, 3, 4, 9, 5, 6, -1}; insertSort(arr)原创 2022-03-11 23:44:29 · 79 阅读 · 0 评论 -
5.归并排序
就是分治 归并排序:是一种空间换时间的算法,主要采用的是递归,时间复杂度是o(n-1) 归并排序就是把找到最小的左边或者右边,找到左边最小的,右边最小的,然后进行排序,然后递归查找更大级别的在把它们排序,需要用到一个临时数组,临时数组存放的是排序之后的数组 public class MergeSort { public static void main(String[] args) { int[] arr = {8, 4, 5, 7, 1, 3, 6, 2};原创 2022-03-11 23:43:47 · 104 阅读 · 0 评论 -
4.快速排序
一种很快的排序算法 1.先找到中间值,定义一个r,存放的是右边,l存放的是左边 2.如果左边小于右边 1)从左边一直开始往右找,找到大于中间值的数,退出 l++ 2)从右边开始往左找,找到小于中间的数,退出 r-- 3)如果左边大于或者等于右边了,退出 4)找到的左边右边的数进行替换 5)如果当前定位的左边的值等于中间的值,右边的下标向左移动一格。如果右边的值等于左边的值,左边下标向右移动一格 3.左边等于右边,进行右下标左移,左下标右移 4.left < r 左递归,right&g原创 2022-03-11 23:42:34 · 280 阅读 · 0 评论 -
3.基数排序
基数排序,也叫桶排序(空间换时间的算法), 注意:如果排序的数很大的话,可能内存溢出。不能有负数,如果要支持负数的话需要取绝对值,在给他倒转 桶排序的实现: 1.先找到最大的数 2.找到最大数的位数 3.定义一个二维数组,二维数组里面的每个数代表一个桶,定义一个数组,里面放的是记录的次数 4.进行循环,循环的次数是最大的位数的长度, 先找个位,在找10位,百位。。。。依次找下去 1)先找到个位,找个个位的桶,放进去 2)再根据桶的排序,给他拿出来,赋给原来的数组 5.桶排序其实就是先个位排序原创 2022-03-11 23:41:41 · 66 阅读 · 0 评论 -
2.选择排序
排序算法2-选择排序原创 2022-03-11 23:40:47 · 72 阅读 · 0 评论 -
希尔排序(一种插入排序的升级版)(有交换式和移位式)
排序算法1.希尔排序原创 2022-03-11 23:38:46 · 134 阅读 · 0 评论