算法的概念和评价以及查找算法

来源:互联网 发布:C语言经典算法实现 编辑:程序博客网 时间:2024/06/06 00:58

1.算法的概念和评价

1.1.基本概念:

        算法就是指对解题方案准确而有完整的描述。

1.2.评定标准:

        2.1 时间复杂度(重点):主要用于描述算法时间的消耗与问题规模之间的函数关系。

        2.2 空间复杂度:主要用于描述算法空间的消耗与问题规模之间的函数关系。

        2.3 正确性:主要用于描述算法的执行结果是否满足要求。编写后,才考虑,以上是编写前。

        2.4 可读性:主要用于描述算法本身是否便于人们的阅读。

        2.5 健壮性:主要描述算法对非正常输入的反应和处理能力。


1.3.描述方式:

        目前主流的算法描述方式:自然语言、伪代码(不能执行的代码)、流程控制图、PAD图

        程序员常用的算法的描述方式是自然语言、伪代码。

****************************************************************************************************************************

2.线性查找算法

2.1 线性查找算法(顺序查找算法)

        (1)算法流程

                 使用目标元素与样本数列中的第一个元素依次比较,如果找到了与目标元素相等则表示查找成功;如果与后续的所有元素查找比较完毕,但没有找到与目标元素相等的元素,则表示查找失败。

        (2)算法评价

                 平均时间复杂度 O(N) ,对样本的有序性不敏感



2.2 二分查找算法(折半查找法)

        (1)算法流程

                 假定样本数列中的所有元素都是从小到大排列的,首先使用目标元素与样本数列中的中间元素进行比较,如果相等,则表示查找成功;如果目标元素小于中间元素则应该继续在中间元素的左边进行查找,如果目标元素大于中间元素则应该继续在中间元素的右边进行查找。直到查找目标元素成功,或者与后续该比较的元素全部比较完毕,则查找失败。

        (2)算法评价 

                 平均时间复杂度O(logN),要求样本数列中的元素有序;
   

****************************************************************************************************************************************
3.常用的排序算法


3.1 冒泡排序算法(重点)
        (1)算法流程

             a.比较两个相邻位置的元素大小,如果第一个元素比第二个元素大,则交换两个元素的位置;
             b.对每一对相邻位置的元素做同样的工作,从开始的第一对一直到最后的一对,经过这一步,最后的元素将是这组样本元素中的最大值;
             c.针对所有样本元素重复以上步骤,除了最后一个元素;
             d.持续对越来越少的元素重复以上步骤,直到没有元素需要交换为止;

         (2)算法评价  
            平均时间复杂度 O(N^2),稳定,对样本的有序性非常敏感;


3.2 插入排序算法
      (1)算法流程  

           a.从第一个元素起,假定该元素已经有序;
           b.取出下一个元素,在已经有序的数列中从后向前依次进行比较;
           c.如果左边的元素大于取出的元素,则左边的元素右移,也就是赋值到下一个元素的位置;
           d.如果左边的元素小于等于取出的元素,则将取出的元素插入到左边元素的右边;
           e.重复第二步,直到处理完毕所有元素为止;


      (2)算法评价   
           平均时间复杂度 O(N^2),稳定,对样本的有序性非常敏感,赋值的次数比冒泡排序少,因此一般情况下略优于冒泡排序算法;
   
3.3 选择排序算法
      (1)算法流程

           a.从第一个元素起,假定该元素是最小值,并使用变量min记录该元素的下标;
           b.使用min记录的元素与后续元素依次进行比较;
           c.如果找到比min记录的元素还小的元素,则修改min的值为该元素的下标;
           d.重复第二步骤,直到使用min记录的元素与后续所有元素都比较完毕时,交换min记录的元素和最开始假定的元素,此时第一个元素将是这组元素中的最小值;
           e.重复上述步骤,持续对越来越少的元素进行处理,直到处理完毕所有元素为止;


       (2)算法评价
           平均时间复杂度 O(N^2),不稳定,对样本的有序性不敏感,虽然该算法比较的次数比较多,但是交换的次数比较少,因此一般情况下略优于冒泡排序;


3.4 快速排序算法
(1)算法流程

     a.选择样本数列中的中间元素作为基准值,单独保存起来
     b.分别使用左右两边的元素依次和基准值进行比较,将所有比基准值小的元素放在基准值的左边,将所有大于等于基准值的元素放在基准值的右边,这个过程叫做分组;
    c.以递归的方式分别对小于基准值的分组和大于基准值的分组进行再次分组,直到处理完毕所有元素为止;


(2)算法评价
      平均时间复杂度 O(NlogN),不稳定,对样本的有序性不敏感。

        

0 0