此函数的时间复杂度/包括字符串数组

时间:2018-03-14 23:08:55

标签: c string time-complexity big-o complexity-theory

为什么这个函数的时间复杂度为O((n ^ 2)* L)(L-最大字符串的长度)而不是O(n ^ 2)?看来strcmp在这里玩的东西却不知道是什么。

void lex_sort(char *str_arr[]){
 int size = 0, i, j;
 while (str_arr[size] != NULL)
   size++;
 for (i = 0; i < size - 1; i++) {
   for (j = i + 1; j < size; j++) {
    if (strcmp(str_arr[i], str_arr[j]) > 0) {
    // str_arr[i] is greater than str_arr[j]
     char *temp = str_arr[i];
     str_arr[i] = str_arr[j];
     str_arr[j] = temp;
    }
   }
  }
 }

1 个答案:

答案 0 :(得分:1)

看起来n = size是数组中字符串的数量。你有两个循环,使它成为O(n ^ 2)。但是字符串的比较是O(L)。所以,你得到O(n ^ 2 * L)。我想你已经弄明白了。 strcmp是O(L)。

巴比