随笔分类 -  排序算法

背
摘要:前言: 堆性质定义 大根堆:arr(i)>arr(2*i+1) && arr(i)>arr(2*i+2) 小根堆:arr(i)<arr(2*i+1) && arr(i)<arr(2*i+2) 堆排序基本思想: 1.首先将待排序的数组构造成一个大根堆,此时,整个数组的最大值就是堆结构的顶端 2.将顶端 阅读全文
posted @ 2021-10-22 14:46 朝才 阅读(163) 评论(0) 推荐(0)
摘要:计数排序 思路: 负数暂不考虑,后续维护 1- 找出数组中的最大值,新建一个 最大值+1 长度大小的数组 2- 数组中的数据 作为计数数组的下标,值存出现的次数 3- 循环计数数组,value > 0 将下标放入结果数组 时间复杂度: O(n + k) 空间复杂度:O(k) (一)代码 public 阅读全文
posted @ 2021-07-01 15:17 朝才 阅读(88) 评论(1) 推荐(1)
摘要:插入排序: 思路: 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。 时间复杂度: 最好 O(N) 当数组正序 最坏 O(N ^ 2) 当数组倒叙 (一)代码 public class I 阅读全文
posted @ 2021-06-30 16:01 朝才 阅读(34) 评论(0) 推荐(0)
摘要:选择排序算法: 思想: 每次在未排序得数组中找到最小的放到排序数组末尾 时间复杂度: O(n²) (一) 代码 public class SelectionSort { public static void main(String[] args) { int arr[] = new int[]{3, 阅读全文
posted @ 2021-06-30 15:29 朝才 阅读(55) 评论(0) 推荐(0)
摘要:思想: 先拆分,再合并 核心:归并 时间复杂度: 始终都是 O(nlogn) 。代价是需要额外的内存空间 (一) 代码 public class MergeSort { public static void main(String[] args) { int []arr = {9,8,7,6,5,4 阅读全文
posted @ 2021-06-30 15:02 朝才 阅读(60) 评论(0) 推荐(0)
摘要:思想: 两个数比较大小,较大的数下沉,较小的数冒起来。 (一)代码 /** * 优化的冒泡排序 : * 思想:两个数比较大小,较大的数下沉,较小的数冒起来。 */ public class BubbleSort { public static void main(String[] args) { i 阅读全文
posted @ 2021-03-22 14:47 朝才 阅读(64) 评论(0) 推荐(0)
摘要:快速排序算法 思想:它的基本思想主要是通过一趟排序将待排记录分隔成独立的两部分, 其中的一部分比关键字小,后面一部分比关键字大, 然后再对这前后的两部分分别采用这种方式进行排序,通过递归的运算最终达到整个序列有序。 时间复杂度: 在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况 阅读全文
posted @ 2021-03-22 14:34 朝才 阅读(77) 评论(0) 推荐(0)