優化的快速排序

2021-07-10 12:38:59 字數 724 閱讀 6165

//快速排序

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]);

return a[right-1];

}void insertionsort(int a, int n)

a[j] = temp; }}

void quicksort(int a, int left, int right)

while(a[--j] > pivot) {}

if(i < j)

swap(a[i], a[j]);

else

break;

} //退出for迴圈時,a[i]的值大於樞紐元並且位置在a[j]左邊,故a[i]與樞紐元交換, 則此時樞紐元左邊的都是較小值,右邊都是較大值.

swap(a[i], a[right-1]);

quicksort(a, left, i-1);

quicksort(a, i+1, right);

} else }

void quicksort(int a, int n)

快速排序的優化

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

快速排序的優化

快排是效率很高的排序方法,但仍有一些問題,如穩定性不高,處理小陣列效率不算很高,處理重複數字效率低,難以選取最優中軸 主要有三種優化方式 前 中 後三者排序 並把中軸放在high 1的位置 如 會處理為 public static void dealpivot int arr,int left,in...

快速排序 優化

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