快速排序 一

2021-04-08 11:18:42 字數 2271 閱讀 7266

/**

* title:快速排序

* description:

* 速排序法(quick sort)是目前所公認最快的排序方法之一(視解題的物件而定),

* 雖然快速排序法在最差狀況下可以達o(n2),但是在多數的情況下,快速排序法的效率表現是相當不錯的。

* 快速排序法的基本精神是在數列中找出適當的軸心,然後將數列一分為二,分別對左邊與右邊數列進行排序,而影響快速排序法效率的正是軸心的選擇。

* * company:

* @author not attributable

* @version 1.0

*/public class quicksort

system.out.println("");

}public static void swap(int number, int i, int j)

/*** 以左邊元素為軸的快速排序

* 解法:

* 1.將最左邊的數設定為軸,並記錄其值為 s

* 廻圈處理:

* 2.令索引 i 從數列左方往右方找,直到找到大於 s 的數

* 3.令索引 j 從數列右方往左方找,直到找到小於 s 的數

* 4.如果 i >= j,則離開迴圈

* 5.如果 i < j,則交換索引i與j兩處的值

* 6.將左側的軸與 j 進行交換

* 7.對軸左邊進行遞迴

* 8.對軸右邊進行遞迴

* 透過以下演演算法,則軸左邊的值都會小於s,軸右邊的值都會大於s,如此再對軸左右兩邊進行遞迴,就可以對完成排序的目的

* 例如下面的例項,*表示要交換的數,表示軸:

* [41] 24 76* 11 45 64 21 69 19 36*

* [41] 24 36 11 45* 64 21 69 19* 76

* [41] 24 36 11 19 64* 21* 69 45 76

* [41] 24 36 11 19 21 64 69 45 76

* 21 24 36 11 19 [41] 64 69 45 76

* 在上面的例子中,41左邊的值都比它小,而右邊的值都比它大,如此左右再進行遞迴至排序完成。

** @param number 排序陣列

* @param left  開始索引

* @param right 結束索引

*/public static void sort(int number, int left, int right)

number[left] = number[j];

number[j] = s;

sort(number, left, j - 1); // 對左邊進行遞迴

sort(number, j + 1, right); // 對右邊進行遞迴}}

/*** 以中間元素為軸的快速排序

* 取中間的元素s作比較,同樣的先得右找比s大的索引 i,然後找比s小的索引 j,

* 只要兩邊的索引還沒有交會,就交換 i 與 j 的元素值,這次不用再進行軸的交換了,因為在尋找交換的過程中

* ,軸位置的元素也會參與交換的動作,例如:

* 41 24 76 11 45 64 21 69 19 36

* 首先left為0,right為9,(left+right)/2 = 4(取整數的商),所以軸為索引4的位置,

* 比較的元素是45,您往右找比45大的,往左找比45小的進行交換:

* 41 24 76* 11 [45] 64 21 69 19 *36

* 41 24 36 11 45* 64 21 69 19* 76

* 41 24 36 11 19 64* 21* 69 45 76

* [41 24 36 11 19 21] [64 69 45 76]

* 完成以上之後,再初別對左邊括號與右邊括號的部份進行遞迴,如此就可以完成排序的目的。

* @param number

* @param left

* @param right

*/public static void sort1(int number, int left, int right)

sort1(number,left,j);

sort1(number,i,right);}}

public static void sort2(int number, int left, int right)

public static void main(string args) ;

sort1(number, 0, number.length - 1);}}

快速排序(一)

include int quicksort int int,int int index int int,int int main void quicksort a,low,high printf 快速升序後的值為 n for i 0 i 8 i return 0 int quicksort int ...

快速排序(一)

快速排序的基本思想 1 先選定一個特定的數v,將一組數分為三個部分。需要三個下標來表示。l 作為左值,j 標定值,i 作為右值。arr l 1.j v 2 接著判斷i 1後面的部分屬於哪一部分。若arr i 1 v,不動,直接將該數放在此處就好。若arr i 1 分好後,最後一步將特定的數v與當前j...

排序演算法(一) 快速排序

突然覺得在本科的時候自己的基本功練習的不是很過關,趁著學python的熱乎勁好好把基礎演算法過一過,等以後面試的時候也不會死的太慘。快速排序 quicksort 快速排序的可以說是在資料量較大且資料夠隨機的情況下,平均時間複雜度最好的演算法,如果你沒辦法判斷待排序資料的隨機度和規模,用quickso...

排序演算法一 快速排序

package math 快速排序 思路 使用兩個座標指標low,high 和基準值 key為第一個值 low 初始化時設定序列的頭和尾為low,high。從high開始比較key,如果比key小則交換位置,然後從low比較key如果大於key則交換位置 如此反覆執行 author cyd publ...

快速排序優化(一)

歸併排序時間複雜度 快速排序時間複雜度 快速排序最差時間複雜度 快速排序的最壞情況基於每次劃分對主元的選擇。基本的快速排序選取第一個元素作為主元。這樣在 陣列已經有序的情況下,每次劃分將得到最壞的結果。一種比較常見的優化方法是隨機化演算法,即隨機選取一個元素作為主元。這種情況下雖然最壞情況仍然是o ...