關於快速排序演算法的乙個實現

2022-06-12 14:57:08 字數 1096 閱讀 5519

快速排序的意思就是說,對於乙個陣列,隨機從陣列中選取乙個值,然後將陣列裡的其他值與選中的值進行比較,小於選中的值的放在左側,大於選中的值的,放在右側。將選中的數放在中間。對於左邊和右邊的部分分別重複這個過程直到每次處理乙個或者兩個值,全部結束後認為排序完成。

以下是實現演算法:

public void quicksort(int data,int begin,int end)

return ;

}int l = begin,r = end,m=0;

while(l<=r)

data[l] = data[r];

}else

data[r] = data[l];}}

quicksort(data,begin,m-1);

quicksort(data,m+1,end);

}

以上就是本文一開始快速排序演算法的**實現,從**中可以看出,程式每次執行一次,將有乙個數字被排序好(即m),所以程式需要遞迴n次(不考慮遞迴結束的情況,實際值小於n)。如果在遞迴前,將目標數周圍與目標數相等的數也預設排序完成,就可以提高該演算法的效率。根據以上思想,修改程式如下:

public void quicksort(int data,int begin,int end)

return ;

}int l = begin,r = end,m=0;

while(l<=r)

data[l] = data[r];

}else

data[r] = data[l];}}

l = m-1;

while(begin<=l && data[l]==temp)

l -= 1;

r = m+1;

whiel(r<=end && data[r] == temp)

r += 1;

quicksort(data,begin,l);

quicksort(data,r,end);

}

快速排序演算法是不穩定的,原因在於:在兩側指標分別搜尋時,無法保證元素的先後順序。右側的元素被移動到左側,和左側原來的元素之間的相對關係是隨機的。因此,快速排序不是一種穩定排序的演算法。

快速排序的乙個Java實現

畢業之後遠離演算法好久了,突發奇想寫乙個快排吧,當時怎麼都學不會,看看現在能不能寫出來。以下是時間線 計時開始 依然有bug 噹噹當,靈機一動 時間啊,等等我 咦,可以了 憋了兩個多小時才寫出了,也是醉了,看來演算法水平還是很菜,不過總算是寫出來了,這次對快排又加深了一點理解。created by ...

關於常用排序演算法的乙個總結

前段時間被人問到排序演算法,今天特此總結一下,冒泡,選擇,快排,歸併,插入這五種排序演算法。1.選擇排序 選擇排序是整體對比,每次選出你最需要的那個值,比如以下 首先選出最小的值,從小實現從小到大排序,外迴圈一次,內部迴圈記錄下最小的座標,只發生一次交換,它是一種穩定的排序演算法,時間複雜度為o n...

我寫的乙個 C 快速排序演算法

這幾天在讀程杰的 大話資料結構 上面有介紹快速排序演算法。關於排序演算法一直沒有下功夫研究過,全都是用現成的,這次花了點時間自己動手寫了寫,順便也檢驗了自己對 c 11 的掌握程度。快速排序原理上很簡單,乙個陣列分成前後兩部分,保證前邊的數都比後面的小。之後遞迴的再這麼分下去就行了。下面是 首先需要...