java sort 個人筆記

2021-09-24 21:49:42 字數 1914 閱讀 1347

快速排序主要是對那些基本型別資料(int,short,long等)排序, 而歸併排序用於對object型別進行排序。

使用不同型別的排序演算法主要是由於快速排序是不穩定的,而歸併排序是穩定的。這裡的穩定是指比較相等的資料在排序之後仍然按照排序之前的前後順序排列。對於基本資料型別,穩定性沒有意義,而對於object型別,穩定性是比較重要的,因為物件相等的判斷可能只是判斷關鍵屬性,最好保持相等物件的非關鍵屬性的順序與排序前一致;另外乙個原因是由於歸併排序相對而言比較次數比快速排序少,移動(物件引用的移動)次數比快速排序多,而對於物件來說,比較一般比移動耗時。

此外,對大陣列排序。快速排序的sort()採用遞迴實現,陣列規模太大時會發生堆疊溢位,而歸併排序sort()採用非遞迴實現,不存在此問題。

總結:首先先判斷需要排序的資料量是否大於60。

小於60:使用插入排序,插入排序是穩定的

大於60的資料量會根據資料型別選擇排序方式:

基本型別:使用快速排序。因為基本型別。1、2都是指向同乙個常量池不需要考慮穩定性。

object型別:使用歸併排序。因為歸併排序具有穩定性。

注意:不管是快速排序還是歸併排序。在二分的時候小於60的資料量依舊會使用插入排序

int array = ;

//正序排序

arrays.sort(array);//會檢查陣列個數大於286且連續性好就使用歸併排序,若小於47使用插入排序,其餘情況使用雙軸快速排序

system.out.println("公升序排序:");

for (int num : array)

public class studentasc implements comparable

public string getname()

public void setname(string name)

public integer getage()

public void setage(integer age)

public int compareto(studentasc o)

if(null == o.getage())

return this.age.compareto(o.getage());

}@override

public string tostring() ';

} }//正序排序,年齡為null時為小

studentasc studentwang = new studentasc("王小二", 10);

studentasc studentzhang = new studentasc("張三", 1);

studentasc studentgou = new studentasc("狗子", 99);

studentasc studentzhao = new studentasc("趙六", 40);

studentasc studentli = new studentasc("李四", null);

liststudentascs = new arraylist(arrays.aslist(studentwang, studentzhang, studentgou, studentzhao, studentli));

collections.sort(studentascs);

system.out.println("自定義物件,公升序排序:");

for(studentasc studentasc : studentascs)

arrays.sort(intervals, new comparator() 

});

collections.sort(persons,new comparator() 

});}

java sort排序原理

事實上collections.sort方法底層就是呼叫的arrays.sort方法,而arrays.sort使用了兩種排序方法,快速排序和優化的歸併排序。快速排序主要是對那些基本型別資料 int,short,long等 排序,而歸併排序用於對object型別進行排序。使用不同型別的排序演算法主要是由...

ant 個人筆記

ant 命令想關屬性 buildfile file f 使用指定的構建檔案 projecthelp 獲得專案的資訊 ant構建檔案中想關屬性及用法 dir 資料夾路徑 fileset 檔案集 path 路徑 basedir 專案基目錄的絕對路徑,其他相對路徑都是由他解析而出的 depends inp...

Github 個人筆記

其實預設pull的操作就是乙個分支的merge操作 egit中預設的pull操作是fetch merge,如果要用rebase,可以分開操作。先執行fetch更新remote tracking,再執行rebase進行合併。或者修改pull的預設操作,在.git config檔案中配置.分布式版本控制...