【算法,算法】排序

排序是在学习数据结构的时候接触的,感觉那一块知识前不着村后不着店,自成一体一样。后来学习了其他的算法之后才发现了里面蕴含的道理。本篇博客主要介绍排序算法。计算机世界没有最好只有更好,而推动计算机前进的功臣之一就有算法。

下面来学习一下排序算法,如果你对于几种主要的排序算法比较的熟悉的话,可能会很容易分清他们的关系。但是如果稍微有点混淆就会绕进去。感觉差不多啊。什么 插入、选择、交换、归并排序,感觉都差不多啊。。

带着问题学习最优效率。这里有几个概念需要在这个过程中体会:

1、排序分类

2、稳定性

3、时间复杂度(这里不重点讲空间复杂度啦!)

4、关键字,这个概念辅助学习

一、排序分类

         在学习排序分类的时候你要知道一个词——关键字。它在排序过程中起到的眼的左右。有了它就对于排序有了下手点。拿排序来说,关键字在排序算法中可以叫哨兵(监视哨),它是一个临时变量。因为 插入排序是用关键字和前面一排有序列进行比较,如果找到合适位置插入进去即可。冒泡排序的关键字就是遍历所有序列元素开始的地方,所以我就主观的给关键字下一个 定义:关键字可用于盛装需要排序的元素。可能会不对但是小编用这个关键字理解了所有排序算法。根据关键点是如何进入有序队列,或选择关键字的运动轨迹,这里大家有什么好的想法可以多多交流。。。咱们都知道排序分为插入排序、选择 排序、交换排序、归并排序。

二、排序举例(拿插入排序举例)

概念:将关键字与有序队列进行对比,找到 合适位置,插入;第一个数为自然有序队列;关键字会被放到哨兵中;

举例:以18,12,25,10,8,12 这6个数为例

说明:上面六个数中12为重复的,后面的数用下划线标示,黑线表示比较的元素,绿线表示哨兵中的关键字插入到合适的位置。

实例:整理扑克牌

稳定性和平均时间复杂度分为:稳定,O(n2);

说明:怎么理解稳定性,从它的概念入手,当两个重复的数字(像上面的12),在排完序之后前后位置没有改变(划下横线的12仍然在后面),我们就说是稳定的,否则反之;时间复杂度有最好情况和最坏情况,最好情况就是有一个有序队列(升序),对它进行从小到大排序,这样比较交换的次数是最少的,反之从大到小排就要进行最多的排序和插入,上面这个插入排序的最好情况是O(n),就是上图中黑线部分,只有比较,没有插入,最坏情况O(n2),比较完之后,全部插入,他们的平均时间复杂度就是O(n2)。

三、和其他排序对比

其他排序,有时候你要看到他的排序过程才会想起来吗?其实不用

堆排序

        比如大顶堆它就是一个局部最优的排序,而且在排成大顶堆(或小顶堆)的时候要将顶端点和最后一个进行对比,它可以在不和某些元素对比就变换到它的前面或后面。所以它就是不稳定的。

冒泡排序

       冒泡排序是先选择一个第一位关键字和它相邻的元素比对,然后根据大小交换或不交换位置,然后第二位成为关键字。为什么说它是稳定的呢,因为它们对比的元素都是相邻的。都是前面和后面对比。这样就能知道它是一个稳定算法。冒泡是一个部分最好情况和最坏情况的,因为它不管你是已经是从小到大,还是从大到小排列好的,最后都要进行一样多的比较。

二路归并

这个挺有意思的一个算法,分成小组排序,然后再一点点扩大,这个和选择排序里面的快速排序有点像,不过它是从大到小。

比如有8个数,会被分成4组各自进行排序。之后合并成两组进行比较排序,最后合并成一个序列进行排序。它的稳定性和插入算法差不多,是稳定的。


      总之,说一说学习这一块的感受,之前不理解,它虽然和哪里都没有明显的联系,但是当你学习了足够多之后,排序并不孤立,比如学习计算机硬件基础的时候,对于里面文件是如何分配和管理的都用到了排序或者序列。所以细细体会他们之间的联系,我们可以挣脱这些知识的桎梏,学习更快乐。

         这里只是说了说我对于排序的一些理解,小小记录一下。天外有天,算法之外还有算法,后面还有其他的算法的分析。敬请期待。。

评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值