CLRS 2.2分析算法
来源:互联网 发布:js字符串转换为日期 编辑:程序博客网 时间:2024/04/30 04:04
2.2-1
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 次,则最后一次是多余的。
最好和最坏的情况都需要
2.2-3
平均是检查一半,最坏情况下所有元素都要检查,所以都是
2.2-4
我们检查是否已经排序,假如已经排序好了就直接返回。
0 0
- CLRS 2.2分析算法
- CLRS 17.1聚合分析
- clrs算法导论题解
- 算法导论(CLRS)答案
- CLRS 1.1算法
- CLRS 2.3设计算法
- CLRS 5.3随机算法
- CLRS 7.4快速排序分析
- 算法导论CLRS 8.3 基数排序
- 算法导论CLRS-notes-0
- CLRS 6.4堆排序算法
- CLRS-算法导论-目录+书评
- 《算法导论》CLRS算法C++实现 索引
- 算法导论Introduction to Algorithms(CLRS)
- 算法导论CLRS 2.1 插入排序
- 算法导论CLRS 2.3 合并排序
- 算法导论CLRS 6 堆排序
- 算法导论CLRS 7.1 快速排序
- 在有openJDK的情况下,安装官方JDK,并改为默认
- Android上传文件到Web服务器,PHP接收文件
- 如何在自定义的ViewController加载Storyboard里面的ViewController
- 053第401题
- Nginx源代码分析之upstream(八)
- CLRS 2.2分析算法
- Java Web开发之:ModelDriven
- Tarjan算法求至少要添加几条边才能使无向连通图变为边双连通图。
- iOS写出文件
- 纯粹的K12精髓 - 名师指导整理《20以内加法口诀表》
- centOS上安装redis
- 核间通信原理
- linux常用命令或功能
- PHP+MYSQL如何插入记录到数据库