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

浙公网安备 33010602011771号