簡體   English   中英

如何在原始數據類型數組上調用java內置的TimSort

[英]How to call java built-in TimSort on an array of primitive data types

在 Java 中,方法Arrays.sort有兩個重載(我感興趣,在這篇文章中)一個用於原始類型,另一個用於引用類型。 他們使用不同的排序算法。

如何使用用於引用類型的算法對原始類型進行排序(不將它們轉換為引用類型,也不使用列表)

方法Arrays.sort(int[])使用 Dual-Pivot Quicksort

方法Arrays.sort(Object[])使用TimSort

如果我有一個int[] array = { /* some values here */ }; , 如何使用 TimSort 對其進行排序? (我知道使用Integer[] array = { /* some values here */ };將使用 TimSort 但我不希望那樣做,因為使用對象而不是原始數據的開銷,並且稍后可能會有一些裝箱和拆箱)

還是在原始數據上使用 TimSort 效率不高?

我為 TimSort java.util.TimSort找到了一個類,但我無法在我的代碼中訪問它。

這個問題的原因是 Quicksort 有一個O(n^2)的最壞情況,我遇到了一個利用這種情況的數組。 雖然 TimSort 有(n log(n))的最壞情況和O(n)的最佳情況

更新:

我實際上只是對 TimSort 有一個內置方法感興趣,它不需要是Arrays.sort 如果有任何其他內置方法可以使用 TimSort 對原始數據類型進行排序,那么它是完全受歡迎的。

java 內置的TimSortComparableTimSort不適用於原始數據類型的數組,它只是排序方法需要對象數組

static void sort(Object[] a, int lo, int hi, Object[] work, int workBase, int workLen);

雖然DualPivotQuicksort具有原始類型的排序方法,例如:

static void sort(char[] a, int left, int right,
                 char[] work, int workBase, int workLen);
static void sort(int[] a, int left, int right,
                 int[] work, int workBase, int workLen);


更新。 雖然它不是關於Arrays.sort原始問題的答案,但geeksforgeeks已經為 c++/java/python3/c# 實現了 timsort。 java的方法原型是:

public static void timSort(int[] arr, int n);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM