二分查找的时间复杂度为:
首先在n个元素中查找, 然后在n/2个元素中查找, 再在n/4个元素中查找...直到为1, 相当于n经过多少次除以2等于1, 所以其时间复杂度为logN
int binarySearch(int arr[], int target, int n) { int left = 0, right = n - 1; while (left <= right) { int pivot = (left + right)/2; if (arr[pivot] == target) return pivot; if (arr[pivot] < target) left = pivot + 1; else right = pivot - 1; } return -1; }
整形转字符串的时间复杂为:
相当于N经过多少次除以10等于0, 所以其时间复杂度为logN
/** 数字转字符串*/ func intToString(_ num: Int) -> String { var temNum = num var s = "" while temNum>0 { s += "\(temNum%10)" temNum /= 10 } s.reversed() return s }
下面的算法的时间复杂度为N*logN
第一层for循环,相当于sz从1开始, 经过多少次乘以2等于n, 或者n经过多少次除以2等于1, 所以第一层的时间复杂度为logN
void hello(int n) { for (int sz = 1; sz < n; sz += sz) { for (int i = 1; i < n; i++) { printf("hello world"); } } }