快速排序的優化

2021-10-10 02:02:53 字數 1193 閱讀 5170

​ 快排是效率很高的排序方法,但仍有一些問題,如穩定性不高,處理小陣列效率不算很高,處理重複數字效率低,難以選取最優中軸

主要有三種優化方式

/**

* 前 中 後三者排序 並把中軸放在high - 1的位置 如 會處理為

*/public

static

void

dealpivot

(int

arr,

int left,

int right)

if(arr[left]

> arr[right])if

(arr[right]

< arr[mid]

)swap

(arr, right -

1, mid)

;}

public

static

void

quicksort3

(int

arr,

int left,

int right)

if(left < right)

i++;}

while

(j > left && arr[j]

>= arr[pivot]

) j--;}

//交換左右元素

if(i < j)}if

(i < right)

//處理放在右邊的重複元素

for(

int k = rightlen; k >

0; k--)}

//向左遞迴

quicksort3

(arr, trueleft, i -1)

;//向右遞迴

quicksort3

(arr, i +

1, trueright);}

}

/**

* 處理陣列中部分元素的插入排序

*/public

static

void

partinsertsort

(int

arr,

int left,

int right)

arr[insertindex +1]

= insertval;

}}

優化的快速排序

快速排序 void swap int a,int b int median3 int a,int left,int right if a left a right if a center a right 將中值放在倒數第二個位置並作為樞紐元返回 swap a center a right 1 ret...

快速排序的優化

快速排序的優化 1,隨機選取基準法 2,三分基準法 3,當代排序陣列當中資料比較少的時候用直接插入法 4,聚集相同元素法 基準一樣的元素 一,當序列有序的時候快速排序的時間複雜度將會變成o n2 例如 1 2 3 4 5 6 7 8 9 所以我們要採取優化來使基準不會一直被選取最小的那個數。這時候我...

快速排序 優化

快速排序是對氣泡排序的一種改進。其基本思想基於分治法 在待排序表中選擇乙個元素當作標準記為mark,通過一次排序將排序表分成兩個部分,前一部分是小於mark的所有元素,後一部分是大於等於mark,mark放在了最終的位置上,這一過程叫做一趟快速排序。然後分別遞迴的對兩個子表進行上述重複過程,直到每個...