快速排序算法的理論:
1, 如果S中的元素個(gè)數(shù)是0或者1,那么返回。
2, 選取S中的任一元素v,稱(chēng)為中心點(diǎn)。
3, 將S集合中的元素分為2個(gè)部分:L={小于pivot 的元素+ pivot }和R={大于或者等于pivot的元素}。
4, 返回L和R。
我們使用Java使用的是就地排序的方式,因此不需要返回值。
因?yàn)镴ava是一種可以修改變量的語(yǔ)言,用函數(shù)式語(yǔ)言的術(shù)語(yǔ)來(lái)說(shuō),就是有“副作用”。我們利用這個(gè)副作用直接修改作為參數(shù)的Array,不需要返回值。
代碼:
* 快速排序,有副作用 從小到大
* @param array
* @param start
* @param end這是最后一個(gè)元素的索引,第一次調(diào)用應(yīng)該是array.length-1
*/
public static void quickSort(int[] array,int start,int end){
//有可能造成start>end 因?yàn)檫f歸調(diào)用時(shí)j+1,可能引起j比end還大1。 另外如果數(shù)組是空的,或者輸入錯(cuò)誤也會(huì)出現(xiàn)這種情況
if(end<=start){
return;
}else {
//取中間元素為中心點(diǎn),然后移到最右邊
int sign=(start+end)/2;
int tmp=array[end];
array[end]=array[sign];
array[sign]=tmp;
int j=start;
for(int i=start;i<=end-1;i++){
//小于的元素和標(biāo)記互換,等于的不能互換,否則會(huì)形成死循環(huán)
if(array[i]
tmp=array[i];
array[i]=array[j];
array[j]=tmp;
j=j+1;
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |