快排是效率很高的排序方法,但仍有一些問題,如穩定性不高,處理小陣列效率不算很高,處理重複數字效率低,難以選取最優中軸
主要有三種優化方式
/**
* 前 中 後三者排序 並把中軸放在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放在了最終的位置上,這一過程叫做一趟快速排序。然後分別遞迴的對兩個子表進行上述重複過程,直到每個...