基础篇--插入排序

不用google,直接百度,就会找到很多的关于基础排序算法的博文和帖子。我也犹豫,是否需要自己重新写一下关于几种基础排序的博文。或是直接转载几篇。可是最后还是决定自己重新写一下几篇比较基础的算法知识。因为这里面蕴藏的不仅仅是一种方法,更多的是一种思想,一种很直观的思想。

基础的排序算法,也是最早被提出的几种算法,最先诞生的肯定也是最简单、最直观的。是很多人都能想到的。可是在这些理论背后的一些实践,却又是不近相同的。我在这里不会做太多的引申,只是阐述一下我对这些算法的理解。并尽可能的做出一些代码性的东西。

基础篇的几篇博文,也会着重讨论一下排序的几种方法。具体的,我也没想好有多少,就是写到哪儿算哪儿吧。

提到算法,很多人都会认为是高大上的东西,很多人都会觉得这个东西离我们很遥远。甚至这辈子唯一能接触到的算法就是在电影里看到那些牛掰的科学家说通过一个什么算法做了什么事情。例如:电影复仇者联盟里班纳博士写个算法,找到大老黑的踪迹。

其实,算法离我们很近,近的你都没有在乎过他的存在。例如:当你走在路上,看到一个卖水果的,你称了三个苹果,称完老板说六块钱,这个时候,你发现钱包里没有六块钱的零钱,你会怎么做,如果你够懒,就拿个十块的让他找四块。可是如果你讨厌零钱(很多时候会这样,零钱占地方),你会先看一下,钱包里比6元大的最小的面值的钞票是多大,如果你发现是10元。肯定会选10元的,可是你这个时候讨厌零钱,你就会在你的钱包里继续寻找,是否有1元,这样的话,水果摊的老板直接找你5元整的钞票就好了。其实,这就是一个算法,并且难度不亚于插入排序。

如果你觉得这是个例,那我们就再举一个例子。坐公交车出行,相信每个人都有这个经历。从你家到公司,肯定有多种选择。多条道路。在交通发达的今天,这个是很正常的。可你每天上班的路,几乎是固定的,为什么。这就是你用自己的公交线路算法计算出来的最优值。你肯定会考虑下面的几点:

首先考虑路程,从家到公司,有多少种方式。然后选择其中最短的几条。

其次会考虑车频率的问题,如果两种方案具有相同的站数,但是其中一种方案的公交车一分钟一趟,另外一种半小时一趟。你肯定也会有一个选择。

另外还考虑路上的拥堵情况。如果一种方案需要的站数最少,可是有一段路每天要拥堵1小时,你肯定也不会选他。

其实,这个路线选择算法,要比插入算法复杂很多。要考虑的方面也很多。可是几乎八十岁的老太太都能熟练的应用。只不过没有给它起个比较霸气的名字而已。

如果让你说从家到公司的路线选择,你会脱口而出。可是如果让你用“城市交通路线最优算法”计算从你家到公司的路线,你可能就搞不懂了。其实,只是变了个名字而已。

废话说了一堆,我们开始真正的从最基础的算法开始,学习算法。今天我们首先介绍的,是插入算法。

稍微学过一点计算机知识的,对排序算法并不陌生,如果你在大学学过c语言(亦或是其他任何语言),你都会练习过插入算法的书写。如果你大学里没有学过计算机语言,你参加过计算机等级考试。那你肯定也练习过插入算法。只不过,你可能当时都不知道这个东西叫插入算法。可能也没有理会过这种算法,甚至都没有觉得这是一种算法。下面我们就说一下这个算法,假设下面的数组是已经排序一部分的数组。

有六个数字需要排序,前面的四个已经排列好了,继续排列第五个。第五个要先和第四个数比较,如果比第四个数字小,那就继续和第三个数字进行比较,知道找到小于等于待排序元素的位置,然后将已成型的数组的后半部分进行移动,为插入的数据提供一个位置。这样知道该数字到达他正确的排序位置。这种排序方法,简单来说,就是将需要排序的数字,插入到他合适的位置,所以这种方法叫插入排序。

插入排序的特点是简单,很简单,就像我们斗地主的时候,将扑克牌排序一样,很利于我们直接的理解。

这种排序算法的时间复杂度,要依赖于被排序数列的状态有比较大的依赖性。如果数列是拍好续的,那这种排序算法的时间复杂度是线性的,而如果数列是倒序的,那么时间复杂度将会以二次幂的形式增长。但总体来说,这种排序方法属于一种万金油型排序方法,在排序界,混的很脸熟。

好了,今天唠叨一下自己的看法,并简单介绍一下插入排序。到这里吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值