![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计技巧与分析
YutongTian
编码菜鸟
展开
-
算法设计技巧与分析笔记(6):最优算法
定义:如果已知求解某问题的算法复杂度最优为O(f(n)),则对应该时间复杂度的算法称为最优算法。对大小为n的数组进行排序的最优算法复杂度为:n(log n)原创 2021-03-25 22:35:27 · 457 阅读 · 0 评论 -
算法设计技巧与分析笔记(5):自底向上合并排序
BootomUpSorts代表待合并子集大小t为合并后大小t=2si为待合并起点,初始置为0当i+t<n时因此合并时执行(i+1,i+s)(i+s+1,i+t),此处使用i+1方便将指针移向下一组待排序点合并排序完后执行i<-i+t即移向下一组节点当i+s<n时,即后续节点剩余一组和一个不饱和组,合并(i+1,i+s),(i+s+1,n)例如合并子集大小为4,剩余节点为 {1,34,56,7}、{2,2}剩余情况为后续节点为一个不饱合组,直接进入下一次循环。例原创 2021-03-25 15:10:15 · 258 阅读 · 0 评论 -
算法设计技巧与分析笔记(4):插入排序
InsertionSort选择排序的思想为:默认原序列有序,寻找下一元素的插入位置,从尾部开始遍历,如果尾部元素大于插入值,将尾部元素后移一位。输入:n个元素的数组A[1...n]输出:按非降序排列的数组A[1...n]for i<-2 to n x<-A[i] //待插入元素保存在X中以腾出位置进行元素后移 j<-i-1 //指向待比较元素 while(j>0)and(A[j]>x) A[j+1]<-A[j.原创 2021-03-25 10:44:03 · 155 阅读 · 0 评论 -
算法设计技巧与分析笔记(3):选择排序
SelectionSort输入:n个元素的数组A[1...n]输出:按非降序排列的数组A[1...n]for i<-1 to n-1 k<-i for j<-i+1 to n //查找第i小的元素 if A[j]<A[k] then k<-j end for if k!=i then 交换A[i]、A[k]end fork用来记录最小值的index,初始设置为i,算法比较次数为:n(n-1)/2,.原创 2021-03-24 22:12:15 · 455 阅读 · 0 评论 -
算法设计技巧与分析笔记(2):合并有序表
Merge输入:数组A[1,...,m]和它的三个索引p,q,r,,两个子数组A[p,...,q]和A[q+1,...,r]各自按升序排序。输出:合并两个子数组A[p,...q]和A[q+1,...,r]的数组A[p,...,r]。1. comment: B[p...r]是个辅助数组2. s<-p; t<-q+1; k<-p3. while s<=q and t<=r4. if A[s]<=A[t] then5. .原创 2021-03-24 21:29:57 · 86 阅读 · 0 评论 -
算法设计技巧与分析笔记(1):二分查找
BinarySearch输入:n个元素的升序数组A[1,...,n]和元素x输出:如果X=A[j],,则输出j,否则输出0。原创 2021-03-24 20:40:45 · 170 阅读 · 0 评论