左神算法基础课笔记

认识时间复杂度


常数时间的操作:一个操作如果和数据量没有关系,每次都是 固定时间内完成的操作,叫做常数操作。


时间复杂度为一个算法流程中,常数操作数量的指标。常用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 }

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------第五次课

题目一

实现二叉树的先序、中序、后序遍历,包括递归方式和非递归方式

猜你喜欢

转载自www.cnblogs.com/lulizhiTopCoder/p/10573471.html