认识时间复杂度
常数时间的操作:一个操作如果和数据量没有关系,每次都是 固定时间内完成的操作,叫做常数操作。
时间复杂度为一个算法流程中,常数操作数量的指标。常用O (读作big O)来表示。具体来说,在常数操作数量的表达式中, 只要高阶项,不要低阶项,也不要高阶项的系数,剩下的部分 如果记为f(N),那么时间复杂度为O(f(N))。
评价一个算法流程的好坏,先看时间复杂度的指标,然后再分 析不同数据样本下的实际运行时间,也就是常数项时间。
冒泡排序细节的讲解与复杂度分析
时间复杂度O(N^2),额外空间复杂度O(1)
1 public static void bubbleSort(int[] arr) { 2 if (arr == null || arr.length < 2) { 3 return; 4 } 5 for (int end = arr.length - 1; end > 0; end--) { 6 boolean move = false; 7 for (int i = 0; i < end; i++) { 8 if (arr[i] > arr[i + 1]) { 9 swap(arr, i, i + 1); 10 move = true; 11 } 12 } 13 if(!move) { 14 break; 15 } 16 } 17 }
选择排序的细节讲解与复杂度分析
时间复杂度O(N^2),额外空间复杂度O(1)
1 public static void selectionSort(int[] arr) { 2 if (arr == null || arr.length < 2) { 3 return; 4 } 5 for (int i = 0; i < arr.length - 1; i++) { 6 int minIndex = i; 7 for (int j = i + 1; j < arr.length; j++) { 8 minIndex = arr[j] < arr[minIndex] ? j : minIndex; 9 } 10 swap(arr, i, minIndex); 11 } 12 }
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------第五次课
题目一
实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式