面试利器(一)-------交换排序(冒泡排序和快速排序)

来源:互联网 发布:交通大数据 编辑:程序博客网 时间:2024/06/07 19:02

    最近我在找工作,看了一下每一个公司的要求,几乎每个公司都要求我们熟练掌握几种基本的算法,下面我用最简单的语言写写我的理解。抓住关键我们很快就能理解几种基本的算法,全部都以从小到大排列。

(一)冒泡排序

      抓住关键字---------------交换(两两交换)、冒泡(向上浮动)

     (1)基本思想

      从序列头部开始,进行两两比较,后面的比前面的大就交换,直到最后将最大的数据交换到了序列的末尾。这就完成了第一次排序,下一次继续这个过程,直到所有数据都排好序。

    (2)核心

      算法的核心在于每次通过两两比较交换位置,选出剩余序列里最大的数据放到末尾。

    (3)运行过程

      1、比较相邻的两个数据。如果第一个比第二个大,就交换他们两个。

      2、对每一对相数据素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的数据会是最大的数。

      3、针对所有的数据重复以上的步骤,除了后面已经选出的数据(因为他们已经有序,无需再做比较)。

      4、持续每次对越来越少的剩余数据重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。

    (5)示例:

       


(二)快速排序

  抓住关键字---------------交换(两两交换)、分治法(也就是分组处理数据)

          在此之前先了解一下什么是分治法,什么是递归比较主要

         http://www.cnblogs.com/steven_oyj/archive/2010/05/22/1741370.html  (分治法讲解)    

         http://blog.csdn.net/wangjinyu501/article/details/8248492  (递归讲解)

(1)基本思想

通过一次排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序采用了分治法来解决问题。

(2)运行过程

1、从序列中挑出一个数据,作为关键字--基准,一般是选取序列的第一个数据。

2、所有比基准值小的数据摆放在基准前面,所有比基准值大的元素摆在基准的后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区操作。

3、递归地把小于基准值数据的子数列和大于基准值数据的子数列排序。

4、直到序列的大小是0或1,也就是所有数据都已经被排序好了,递归结束。

(3)示例


a原理展示:



  b过程




原创粉丝点击