[英]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 內置的TimSort
和ComparableTimSort
不適用於原始數據類型的數組,它只是排序方法需要對象數組
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.