CLRS 7.3快速排序的随机化版本
2015-10-12 08:31
513 查看
7.3-1
在随机化算法下,最坏运行时间不会由一个特定的输入产生,而且也不能控制它重复产生,因此我们并不关心它。
7.3-2
最坏情况下 T(n)=T(n−1)+1=Θ(n)T(n)=T(n-1)+1=\Theta(n)。
最好情况下 T(n)=2T(n/2)+1=Θ(n)T(n)=2T(n/2)+1=\Theta(n)。
附上随机化算法代码
在随机化算法下,最坏运行时间不会由一个特定的输入产生,而且也不能控制它重复产生,因此我们并不关心它。
7.3-2
最坏情况下 T(n)=T(n−1)+1=Θ(n)T(n)=T(n-1)+1=\Theta(n)。
最好情况下 T(n)=2T(n/2)+1=Θ(n)T(n)=2T(n/2)+1=\Theta(n)。
附上随机化算法代码
#include <iostream> #include <cstdlib> using std::cout; using std::endl; int PARTITION(int *array,int p,int r) { int pivot = *(array + r); int i = p - 1; for(int j = p; j < r; ++j) { if(*(array + j) <= pivot) { ++i; int temp = *(array + i); *(array + i) = *(array + j); *(array + j) = temp; } } int temp = *(array + r); *(array + r) = *(array + i + 1); *(array + i + 1) = temp; return i + 1; } void QUICKSORT(int *array,int p,int r) { if(p < r) { int q = PARTITION(array,p,r); QUICKSORT(array,p,q-1); QUICKSORT(array,q+1,r); } } int RANDOMIZED_PARTITION(int *array,int p,int r) { int i = rand() % (r - p + 1) + p; if(i != r) { int temp = *(array + i); *(array + i) = *(array + r); *(array + r) = temp; } return PARTITION(array,p,r); } void RANDOMIZED_QUICKSORT(int *array,int p,int r) { if(p < r) { int q = RANDOMIZED_PARTITION(array,p,r); RANDOMIZED_QUICKSORT(array,p,q-1); RANDOMIZED_QUICKSORT(array,q+1,r); } } int main() { int ia[] = {13,-3,-25,20,-3,-16,-23,18,20,-7,12,-5,-22,15,-4,7}; RANDOMIZED_QUICKSORT(ia,0,15); for(int i = 0; i < 16; ++i) cout << ia[i] << ' '; cout << endl; return 0; }
相关文章推荐
- keytool 不是内部或外部命令
- RSS技巧
- Python&nbsp;shutil.copy&nbsp;函数
- 素数
- Ubuntu&nbsp;sun&nbsp;jdk
- Leetcode&nbsp;Binary&nbsp;Tree&amp;n…
- LeetCode:Compare&nbsp;Version&nbsp;Numbers
- Windows&nbsp;Atom&nbsp;使用
- 过去的2014
- 命名规则
- python&nbsp;记录
- 日志级别
- 公共DNS
- Perforce使用指南_forP4V
- 转载:notepad++常用设置
- printf&nbsp;输出补0
- Largest&nbsp;prime&nbsp;factor
- 记个公式
- c++&nbsp;关于char&nbsp;*的…
- 时间转化