链接列表需要更长的时间进行排序吗?

lier wu

我突然想到了一个问题,因为get(index)linkedList方法的时间复杂度不是O(1),而是O(N),那么,这会影响排序的时间复杂度吗?例如,下面的代码(冒泡排序):

public static void bubbleSort(int arr[])
{
    int n = arr.length;
    for (int i = 0; i < n-1; i++)
        for (int j = 0; j < n-i-1; j++)
            if (arr[j] > arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
}

在执行冒泡排序时,我需要获取元素。在任何排序算法中,都需要获取元素,因此...执行气泡排序时,是否需要平均时间复杂度O(n * log(n)* n)?如果是,当我使用时Collections.sort(linkedList),平均时间复杂度是否也为O(n * log(n)* n)?

屋大维河

这是List.sort(Java 13)的实现

 default void sort(Comparator<? super E> c) {
    Object[] a = this.toArray();
    Arrays.sort(a, (Comparator) c);
    ListIterator<E> i = this.listIterator();
    for (Object e : a) {
        i.next();
        i.set((E) e);
    }
}

如您所见,要排序的列表实现并不重要,其性能几乎相同。

现在,如果我们看一下如何toArray实现,我们将看到以下内容:

链表

public Object[] toArray() {
    Object[] result = new Object[size];
    int i = 0;
    for (Node<E> x = first; x != null; x = x.next)
        result[i++] = x.item;
    return result;
}

数组列表

public Object[] toArray() {
    return Arrays.copyOf(elementData, size);
}

因此,如果您想对LinkedList进行排序,它将比ArrayList慢一点,但幅度不大。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

按字母顺序对链接列表进行排序

需要帮助以基于分数进行列表排序

Visual Studio批注需要更长的时间

如何使用用户输入对链接列表进行排序?

OR子句需要更长的时间

需要帮助在Swift中按时间戳对结构进行排序

为什么用execute :: par对向量进行排序要比正常排序(gcc 10.1.0)花更长的时间?

对链接列表节点的数组进行排序

更多压缩的PNG图像需要更长的加载时间吗?

下载压缩文件比解压缩文件需要更长的时间吗?

为什么挖掘需要比DNS查询时间更长的时间?

对单链接列表进行并行排序

mysql还原过程需要更长的时间

日期范围较小时,SQL查询需要更长的时间吗?

如何根据姓氏对链接列表进行排序?

在链接列表中对最高编号进行排序

为什么在这里通过网络进行文件传输需要花费更长的时间?

需要基于来自JSON的日期对象以升序对列表进行排序

在C中按字母顺序对链接列表进行排序

对链接列表进行排序

如何对链接列表中的名称进行排序?

R对多个(链接的)列表进行排序

与通过Web门户进行手动快照相比,使用Endpoint Storage的SL api createSnapshot需要更长的时间?

按链接名称对链接列表进行排序

Group By 与 Join 哪个需要更长的时间?

按日期对链接的哈希映射列表进行排序 Java

JAVA:在链接列表中对彼此相邻的重复值进行排序

如何根据时间对字典列表进行排序

对相互链接的连音列表进行排序