簡介:
的的 事實上collections.sort方法底層就是呼叫的arrays.sort方法,而arrays.sort使用了兩種排序方法,快速排序和優化的歸併排序。 快速排序主要是對那些基本型別資料(int,short,long等)排序, 而歸併排序用於對object型別進行排序。
使用不同型別的排序演算法主要是由於快速排序是不穩定的,而歸併排序是穩定的。這裡的穩定是指比較相等的資料在排序之後仍然按照排序之前的前後順序排列。對於基本資料型別,穩定性沒有意義,而對於object型別,穩定性是比較重要的,因為物件相等的判斷可能只是判斷關鍵屬性,最好保持相等物件的非關鍵屬性的順序與排序前一致;另外乙個原因是由於歸併排序相對而言比較次數比快速排序少,移動(物件引用的移動)次數比快速排序多,而對於物件來說,比較一般比移動耗時。
此外,對大陣列排序。
快速排序的sort()採用遞迴實現,
陣列規模太大時會發生堆疊溢位,而歸併排序sort()採用非遞迴實現,不存在此問題。
接下來看**:
簡單陣列
if (right - left < quicksort_threshold)判斷快速排序的閾值
因為做的是小資料 . 所以繼續
當資料量小的時候通過雙軸快速排序對陣列的指定範圍進行排序。
接下來我們自己手寫乙個排序.
public class wirtesort ;
//陣列最左邊
int left=0;
//陣列的資料量大小
int right=a.length-1;
//陣列的長度
int length=a.length;
system.out.println("陣列最左邊:"+left);
system.out.println("陣列的資料量大小:"+right);
system.out.println("陣列的長度:"+length);
/***
* @param 小型陣列的遍歷方法
* @return
* @author mr.yao
* date 2019-06-03 9:34
*///i為陣列的初始值;j初始為i; i《資料量 j做自增
for (int i = left, j = i; i < right; j = ++i)
}a[j + 1] = ai;
}for (int i=0;i總結:
首先先判斷需要排序的資料量是否大於60。
小於60:使用插入排序,插入排序是穩定的
大於60的資料量會根據資料型別選擇排序方式:
基本型別:使用快速排序。因為基本型別。1、2都是指向同乙個常量池不需要考慮穩定性。
object型別:使用歸併排序。因為歸併排序具有穩定性。
注意:不管是快速排序還是歸併排序。在二分的時候小於60的資料量依舊會使用插入排序
java環境下char型別轉為int型別
char型別轉換為int型別 char a 1 int b int a 此時,輸出b得到的是字元 1 的ascii編碼49,其他數字甚至是字母也一樣,按此類方法輸出的都只會是ascii編碼,當然如果不強制型別轉換,直接寫作 int b a 編譯也不會出錯,不過輸出的依舊是ascii編碼。如果想直接輸...
Java中int和string的型別轉換
int string int i 12345 string s 第一種方法 s i 會產生兩個string物件 第二種方法 s string.valueof i 直接使用string類的靜態方法,只產生乙個物件 第三種方法 s integer.tostring i 三種方法效率排序為 integer...
java中int和String的型別互轉
一.string int的兩種方法 1.int i integer.parseint string 2.int i integer.valueof string 注 string轉成 double,float,long 的方法大同小異.二.int string的三種方法 1.string s str...