經典演算法之快速排序

2022-07-26 17:57:12 字數 1594 閱讀 7754

說明:

快速排序是目前公認最快的排序方法之一。大部分情況都表現得很好,但當必須考慮最壞情況時,快速排序不可接受,因為時間達到o(n2)。

思路:

快速排序的基本思想是在數列中找出適當的軸心,將數列分成左右兩部分(左半部分的元素都小於右半部分的元素),然後分別對兩部分進行排序(重複選擇軸心,劃分左右部分的過程)。

以中間元素為軸(用p表示)進行處理的步驟:

1、 令索引i從左向右找,直到找到大於p的數。

2、 令索引j從右向左找,直到找到小於p的數。

3、 如果i>=j,跳到第五步。

4、 否則,交換i、j兩處元素的值。

5、 對左邊重複上面的步驟。

6、 對右邊重複上面的步驟。

注意:軸心的選擇對快速排序的效率有影響,但以中間元素為軸心的演算法較容易理解。

核心**:

**//

以中間元素為軸

private

static

void

sort2(

int array, 

intleft, 

intright) 

sort(array, left, i -1

);sort(array, j +1

, right);}}

全部**:

**package

com.icescut.classic.algorithm.sort;

public

class

quicksort ; 

//test data

sort2(array, 

0, array.length -1

);for

(int

el : array) }//

以左邊元素為軸承

private

static

void

sort(

int array, 

intleft, 

intright) 

array[left] 

=array[j];

array[j] =p;

sort(array, left, j -1

);sort(array, j +1

, right);}}

//以中間元素為軸

private

static

void

sort2(

int array, 

intleft, 

intright) 

sort(array, left, i -1

);sort(array, j +1

, right);}}

private

static

void

swap(

int number, 

inti, 

intj) 

}

經典排序演算法之快速排序

快排的思想是遞迴。一趟下來,比基數小的都在基數的左邊,比基數大的都在基數的右邊,然後分別對基數左邊的數進行遞迴,對右邊的數進行遞迴 當需要遞迴的元素只有乙個時,結束遞迴。public class quicksort quicksort arr,0,arr.length 1 for int a arr...

經典排序演算法之快速排序

快速排序就是通過一趟排序將原資料分成兩部分,其中一部分關鍵字都比另一部分小,接下來再對這兩部分分別使用快速排序,這裡有遞迴的思想。快速排序的平均時間複雜度為o nlgn 所以適合資料量較大的情況,但快排需要頻繁的對資料位置的操作,故不適合鏈式儲存資料。function sortquick arr,s...

排序演算法 經典排序演算法之快速排序

快速排序的基本思想是分治法,即按照範圍內的第乙個元素劃分為兩個部分,再歸併排序。整體排序的過程有點類似建立平衡二叉樹的過程。1 假設陣列長度為len,low 0,high len 1。以陣列low為標準,根據和首元素的大小關係將待排序陣列分為兩個部分,返回分組index。2 陣列被劃分為兩部分0到i...