Java 数组、排序(字符串[])的时间复杂度是多少

Java 数组、排序(字符串[])的时间复杂度是多少,java,arrays,string,time,time-complexity,Java,Arrays,String,Time,Time Complexity,我知道数组。sortint[]的时间复杂度为Onlgn。但是字符串数组呢。因为排序字符串数组在内部使用compareTo函数来比较两个字符串。它会改变等式吗?说“排序在logn上”的问题是,这是一个不完整的、因此模糊的、未定义的语句。目前尚不清楚这意味着什么。问题是:您未能定义n是什么 现在,在实践中,从上下文来看,n通常是显而易见的。例如,如果我说:对一个整数数组进行排序是在logn上假设一个最佳排序算法,几乎每个听到这个的人都会立即意识到,虽然我没有明确地说n是什么,但我的意思是:n=该数组

我知道数组。sortint[]的时间复杂度为Onlgn。但是字符串数组呢。因为排序字符串数组在内部使用compareTo函数来比较两个字符串。它会改变等式吗?

说“排序在logn上”的问题是,这是一个不完整的、因此模糊的、未定义的语句。目前尚不清楚这意味着什么。问题是:您未能定义n是什么

现在,在实践中,从上下文来看,n通常是显而易见的。例如,如果我说:对一个整数数组进行排序是在logn上假设一个最佳排序算法,几乎每个听到这个的人都会立即意识到,虽然我没有明确地说n是什么,但我的意思是:n=该数组中的整数数

那么让我们回到你的问题:现在n不再清晰

数组中的字符串数是n吗?n是该数组中所有字符串的平均字符数吗

我们这里讨论的是两个独立的变量。因此,为了正确地描述这个问题的大O符号的性能特征,您可以这样说:

给定:String[]str,例如:str={Hello,World,John,Doe} 设n为str数组中的元素数。 设m为str数组中字符串的平均字符数 然后,在此数组上调用Arrays.sortstr将具有Om*n log n的性能特征。 之所以是Om*n logn,是因为排序算法本身将在logn比较操作上运行,以便执行排序。每个比较操作都需要Om时间来完成,尽管这是最糟糕的情况:给定Hello和World,即使这两个操作的m=5,比较只需一步即可完成;该算法将H和W进行比较,并立即给出答案,甚至从不看ello或World。但是,如果字符串是Hello1、Hello2、Hello3和Hello4,那么每次比较2个字符串时,保证有5个“步骤”,并且会在logn上进行比较。

说“排序在logn上”的问题是,这是一个不完整的、模糊的、未定义的语句。目前尚不清楚这意味着什么。问题是:您未能定义n是什么

现在,在实践中,从上下文来看,n通常是显而易见的。例如,如果我说:对一个整数数组进行排序是在logn上假设一个最佳排序算法,几乎每个听到这个的人都会立即意识到,虽然我没有明确地说n是什么,但我的意思是:n=该数组中的整数数

那么让我们回到你的问题:现在n不再清晰

数组中的字符串数是n吗?n是该数组中所有字符串的平均字符数吗

我们这里讨论的是两个独立的变量。因此,为了正确地描述这个问题的大O符号的性能特征,您可以这样说:

给定:String[]str,例如:str={Hello,World,John,Doe} 设n为str数组中的元素数。 设m为str数组中字符串的平均字符数 然后,在此数组上调用Arrays.sortstr将具有Om*n log n的性能特征。
之所以是Om*n logn,是因为排序算法本身将在logn比较操作上运行,以便执行排序。每个比较操作都需要Om时间来完成,尽管这是最糟糕的情况:给定Hello和World,即使这两个操作的m=5,比较只需一步即可完成;该算法将H和W进行比较,并立即给出答案,甚至从不看ello或World。但是,如果字符串是Hello1、Hello2、Hello3和Hello4,那么每次比较2个字符串时,保证有5个“步骤”,并且会进行日志比较。

这能回答您的问题吗@asn21-不,这不是一个相关的答案;这个问题的问题是关于如何“混合”比较两个字符串本身就是一个操作的概念,其时间复杂度不容易被忽略为O1。这能回答你的问题吗@asn21-不,这不是一个相关的答案;这个问题的问题是如何“混合”比较两个字符串本身就是一个操作的概念,其时间复杂度不容易被忽略为O1。
String str[] = {"Hello", "World", "John", "Doe"};
Arrays.sort(str);
System.out.prinltn(Arrays.toString(str));