昨天是9月1号,我也要开始准备找工作了,初步明确了自己的目标以后,打算一边学习算法导论,一边刷leecode.
算法导论的第一章用两种排序算法:插入排序与合并排序介绍算法的框架
1.插入排序算法
①输入为一个数组A【1,n】
②算法是在数组A内部进行重新排序的,不需要申请多余的数组空间
③算法过程:
初始:数组左边的第一个数字;
保持:之后数组的元素依次插入到左边已经排好序的数组中;
终止:当数组的最后一个元素插入到左边数组时,循环终止
④算法的复杂度
在平时的算法评估中,应该是算法的最坏情况运行时间,与平均情况是比较关键的
插入排序算法的最差运行时间为O(n*n)
2.合并排序算法
①合并排序输入也为一个数组
②合并排序的关键在于合并两个已经排好序的数组,合并过程是不断的对比两个数组的元素,相对较小的元素从数组里面取出,因此,它的运行时间是固定的,为O(n)。在书上,我看见多了一个哨兵排,猜测是牺牲一个位置,换取不需要重复的检测数组是否已经为null.
③该排序算法首先将数组不断的分解,直至每一个最小单元只有一个元素,然后从最小单元开始逐渐合并,因此该算法可以采用递归方法实现
④算法的复杂度分析算法的运行时间为O(N*logN);
3.分治法
①分解,将原问题分解为一系列的子问题;
②解决,递归的解各个子问题,如果子问题足够小,则直接求解(递归结束的标志);
③合并,将子问题的结果可以合并到原问题的解
4.循环不变式---检验循环的正确性
①初始化,循环的第一轮迭代开始前,是正确的;
②保持,如果循环的某一次迭代开始前,它是正确的,那么下一次迭代开始之前也应该保持正确;
③终止,循环结束,它表明算法是正确的
插入排序与合并排序
最新推荐文章于 2024-07-14 18:15:43 发布