//快速排序
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放在了最終的位置上,這一過程叫做一趟快速排序。然後分別遞迴的對兩個子表進行上述重複過程,直到每個...