几道计算时间复杂度和空间复杂度的经典习题

实例1:

void bubbleSort(int[] array) {
   for (int end = array.length; end > 0; end--) {
       boolean sorted = true;
       for (int i = 1; i < end; i++) {
           if (array[i -1] > array[i]) {
               Swap(array, i - 1, i);
               sorted = false;
           }
       }
       if (sorted == true) {
           break;
       }
   }
}

时间复杂度为O(N^2),空间复杂度为O(1)

实例2:

int binarySearch(int[] array, int value) {
   int begin = 0;
   int end = array.length - 1;
   while (begin <= end) {
       int mid = begin + ((end-begin) / 2);
       if (array[mid] < value)
           begin = mid + 1;
       else if (array[mid] > value)
           end = mid - 1;
       else
           return mid;
   }
   return -1;
}

时间复杂度O(logN),空间复杂度O(1)

实例3:

long factorial(int N) {
 return N < 2 ? N : factorial(N-1) * N;
}

时间复杂度O(N),空间复杂度O(N)

实例4:

int fibonacci(int N) {
 return N < 2 ? N : fibonacci(N-1)+fibonacci(N-2);
}

时间复杂度O(2^N),O(N)

你可能感兴趣的:(几道计算时间复杂度和空间复杂度的经典习题)