}
}
//把標(biāo)記元素和第一個(gè)>=它的元素位置互換,這樣數(shù)組就分成2個(gè)部分,一個(gè)部分比中心值小,一個(gè)部分比中心值大。 tmp=array[j];
array[j]=array[end];
array[end]=tmp;
quickSort(array,start,j);
quickSort(array,j+1,end);
}
}
Java的Arrays類也使用快速排序算法進(jìn)行排序。但它的代碼寫得像天書一樣。
提高快速排序算法執(zhí)行效率的主要方法是對(duì)中心點(diǎn)進(jìn)行檢測(cè),希望選中的中心點(diǎn)有更大的概率是整個(gè)數(shù)組的中值。
我的實(shí)現(xiàn)中簡(jiǎn)單的選擇數(shù)組中間的值作為中心點(diǎn),一般來說這樣的選擇效率還是不錯(cuò)的。
注意上面的一項(xiàng)實(shí)現(xiàn)技術(shù),我們使用把中心數(shù)據(jù)元素移到數(shù)組最后的方式實(shí)現(xiàn)了數(shù)組的就地比較。這是比較常用的技術(shù),把數(shù)據(jù)移到數(shù)組的最前面或者最后面,方便比較數(shù)據(jù)。
另外,我的Java快速排序代碼使用了“副作用”,而在純函數(shù)式語(yǔ)言,如Haskell,ErLang中是沒有“副作用”的,也就是說變量不可以重新賦值。此時(shí)就需要返回值,每次都創(chuàng)建新的子數(shù)組。但函數(shù)式語(yǔ)言的數(shù)組處理功能很強(qiáng),也會(huì)做很多性能優(yōu)化,因此函數(shù)式語(yǔ)言實(shí)現(xiàn)快速排序代碼更加簡(jiǎn)單,沒有“副作用”,也更加數(shù)學(xué)化。
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |