演算法導論 第7章 高速排序

2021-09-09 02:36:57 字數 1215 閱讀 8000

高速排序在最壞情況下的時間複雜度為o(n^2),儘管在最壞情況下執行時間比較差,可是高速排序一般是用於排序的最佳選擇。由於其平均效能相當好,期望的執行時間為o(nlgn),且在o(nlgn)的記號中隱含的常數因子非常小。

高速排序和合併排序有相似之處,都是須要劃分序列,在合併排序中。劃分的過程非常easy。直接選擇元素序列的中間位劃分位置,排序是在合併的過程中實現的,所以合併排序的合併過程非常重要。相比合併排序,高速排序就沒有合併的過程。僅僅有劃分,高速排序的劃分過程非常重要,排序是在劃分的過程中實現的。

/*

* 演算法導論 第七章 高速排序

* 最壞情況下時間複雜度為o(n^2),這樣的情況出如今每次選擇pivot的時候

* 都選到了最大或者最小的元素。即每次劃分都有一邊為空。

* 其平均時間複雜度為o(nlgn),僅僅要每次劃分,每一邊的元素都至少有乙個即可 */ #include #include using namespace std; void printarray(int arr, int len)

interval(int x, int y)

bool operator<(const interval &interval)

bool operator>(const interval &interval)

bool operator==(const interval &interval)

}interval;

void printarray(interval arr, int len)

} cout << "原區間陣列:" << endl;

printarray(arr, len);

quicksort(arr, 0, len-1);

cout << "模糊排序後的區間陣列:" << endl;

printarray(arr, len);

return 0;

}void quicksort(interval arr, int p, int r)

if (q.b < r)

}}interval partition(interval arr, int p, int r)

else

} if (i > divider.a)

if (j < divider.b)

return divider;

}void exchange(interval arr, int i, int j)

演算法導論 第7章 快速排序

一 快速排序演算法的基本特性 時間複雜度 o n lgn 最壞 o n 2 空間複雜度 o n lgn 不穩定。快速排序是一種排序演算法,對包含n個數的輸入陣列,平均時間為o nlgn 最壞情況是o n 2 通常是用於排序的最佳選擇。因為,排序最快,也只能達到o nlgn 二 快速排序演算法的描述 ...

演算法導論 第7章快速排序

1 演算法描述 快速排序也是基於分治模式的,下面是乙個典型子陣列a p.r 排序的分治過程,主要分為三個步驟 1 分解 將陣列a p.r 劃分成兩個子陣列a p.q 1 和a q 1.r 使得前乙個陣列中每個值都小於等於a q 後乙個陣列每個值都大於a q 下標q也在這個分解過程中求得。2 解決 通...

《演算法導論》筆記 第7章 快速排序

第7章 快速排序 像合併排序一樣,快速排序也是基於分治模式的。下面對乙個典型的子陣列a p r 排序的分治過程的三個步驟 分解 陣列a p r 被劃分成兩個 可能空 的子陣列a p q 1 和a q 1 r 使得a p q 1 中的每個元素都小於等於a q a q 1 r 中的每個元素都大於等於a ...