工程上在進(jìn)行排序的時候會區(qū)分值傳遞和引用傳遞盾似,原因是為了保證穩(wěn)定性:
1.如果是值傳遞敬辣,即基本數(shù)據(jù)類型雪标,對排序穩(wěn)定性沒要求
- 如果是引用傳遞,即對象類型溉跃,排序之前不知道對穩(wěn)定性有沒有要求
- 工程上對排序的改進(jìn)的兩個方面
- 穩(wěn)定性的考慮
值傳遞 不關(guān)心穩(wěn)定性 直接利用快排
引用傳遞 不知道是否需要保證穩(wěn)定性 利用歸并排序
- 充分利用O(N*logN)和O(N2)的有優(yōu)勢
快排 (O(N*logN)) + 插入 ,如代碼中所示村刨,在進(jìn)行排序的過程中,如果L - R之間的數(shù)據(jù)數(shù)量不夠60個撰茎,則會直接使用插入排序(O(N2))嵌牺,這是因為利用常數(shù)項優(yōu)勢,即60的平方并不是很大,再結(jié)合快排的調(diào)度優(yōu)勢進(jìn)行優(yōu)化龄糊。
package Algorithm;
public class QuickSort1 {
void quickSort(int[] arr){
if(arr==null || arr.length < 2){
return ;
}
process1(arr,0,arr.length -1);
}
private void process1(int[] arr, int L, int R) {
if(L >=R){
return ;
}
if(L+60>R){//L .... R 不夠60個數(shù)
//直接做L -R上的插入排序
return ;
}
int M = partition(arr,L ,R);
process1(arr,L ,M-1);
process1(arr,M+1,R);
}
private int partition(int[] arr, int l, int r) {
return 0;
}
}