CLRS 2.2分析算法
2015-07-18 12:18
260 查看
2.2-1
Θ(n3)\Theta(n^{3})
2.2-2
伪代码如下:
运行代码如下:
循环不变式:在第一个 for 循环开始迭代前,子数组A[1…i-1]包含了数组前 i-1 个最小数,且此子数组已经按非递减顺序排好,在第一个 for 循环开始迭代中,min 指示A[i..j−1]中最小数的下标。
之所以只需对前 n-1 个元素,是因为每次外面的 for 循环都会找出一个未排序的子数组中最小的的元素,执行 n-1 次后,前 n-1 个元素是数组前 n-1 个最小数,且已经排序,最后只剩最大的元素放在最末尾的位置,这样数组就排序完成。若进行 n 次,则最后一次是多余的。
最好和最坏的情况都需要Θ(n2)\Theta(n^{2})。
2.2-3
平均是检查一半,最坏情况下所有元素都要检查,所以都是Θ(n)\Theta(n)。
2.2-4
我们检查是否已经排序,假如已经排序好了就直接返回。
Θ(n3)\Theta(n^{3})
2.2-2
伪代码如下:
SELECTION-SORT(A): for i = 1 to A.length - 1 min = i for j = i + 1 to A.length if A[j] < A[min] min = j temp = A[i] A[i] = A[min] A[min] = temp
运行代码如下:
void selection_sort(int *array,int length) { for(int i = 0; i < length - 1; ++i) { int min = i; //记录最小值的下标 for(int j = i + 1; j < length; ++j) if(*(array + min) > *(array + j)) min = j; int temp = *(array + min); *(array + min) = *(array + i); *(array + i) = temp; } }
循环不变式:在第一个 for 循环开始迭代前,子数组A[1…i-1]包含了数组前 i-1 个最小数,且此子数组已经按非递减顺序排好,在第一个 for 循环开始迭代中,min 指示A[i..j−1]中最小数的下标。
之所以只需对前 n-1 个元素,是因为每次外面的 for 循环都会找出一个未排序的子数组中最小的的元素,执行 n-1 次后,前 n-1 个元素是数组前 n-1 个最小数,且已经排序,最后只剩最大的元素放在最末尾的位置,这样数组就排序完成。若进行 n 次,则最后一次是多余的。
最好和最坏的情况都需要Θ(n2)\Theta(n^{2})。
2.2-3
平均是检查一半,最坏情况下所有元素都要检查,所以都是Θ(n)\Theta(n)。
2.2-4
我们检查是否已经排序,假如已经排序好了就直接返回。
相关文章推荐
- 2015 7 18
- Django的URLconf中使用缺省视图参数的方法
- 架构设计:负载均衡层设计方案(4)——LVS原理
- 如何使用svn下载开源的工作流引擎ccbpm?
- 053第401题
- C#实现将HTML转换成纯文本的方法
- 序列——堆排序-大根堆(堆大顶)
- Web前端知识点总结(一)
- swift2 函数
- 在有openJDK的情况下,安装官方JDK,并改为默认
- 如何在默认安装openjdk的Linux系统中安装独立JDK
- TestNG入门_webDriver+java(二)
- crazyradio焊接和下载固件过程
- JavaScript 没有函数重载&Arguments对象
- MinGW安装过程
- 论坛:Error:No result defined for action cn.itcast.oa.view.action.TopicAction and result
- ZMO企业自媒体联盟:开启企业自媒体运营官时代
- android菜鸟学习笔记30----Android使用百度地图API(一)准备工作及在应用中显示地图
- 堆栈的深度理解
- Hihocoder