接下来,我来给大家讲解第三种排序算法,即插入排序。
基本介绍
首先,我们来看下插入排序的基本介绍。
插入排序,其属内部排序法,是对于欲排序的元素以插入的方式来找寻该元素的适当位置,以便最终达到排序目的的一种排序算法。
基本思想
简单认识插入排序之后,接下来我就要来给大家详细说说它的排序思想了。
插入排序的基本思想是这样子的,即把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,然后在排序的过程中每次从无序表中取出第一个元素,取出过后,把它的排序码依次与有序表元素的排序码进行比较,比较过后,再将其插入到有序表中的适当位置,使之成为一个新的有序表。
可能我这样讲,有些同学会觉得比较抽象,不过没关系啊,下面我会给大家看一个插入排序的思路图解,相信大家看完过后自然就会明白我上面讲的插入排序的基本思想了。
说啊,目前有一个数组,它的初始状态是下面这样子的。
大家可以看到,初始状态下我们认为第一个元素17就是一个有序表,因为一个元素不管是按从小到大排,还是按从大到小排,它都是有序的。至于后面的五个元素嘛,那我们就要把它看作是一个无序表了。
接下来,自然就是要来针对该数组进行插入排序了。
首先,我们来看一下第一次插入,根据插入排序的基本思想可知,第一次插入是要将无序表中的第一个元素3插入到有序表中的适当位置去,即有序表元素17的前面。
有同学可能会有疑惑,无序表中的第一个元素3是如何知道要插入到有序表元素17的前面的呢?很简单,3会先跟17比较,很明显,3是要比17小的,因此我们会让17往后面挪一位,挪毕,继续让3与有序表前面的元素进行比较,若发现有序表前面已没有元素了,则便把3插入到17的前面。不难知道,此时,会形成新的有序表(即[3, 17]
)与无序表(即[25, 14 ,20, 9]
)。
然后,我们再来看一下第二次插入,第二次插入不用我说,想必大家都已经知道是要将无序表中的第一个元素25插入到有序表中的适当位置去了吧!
同样,还是刚刚那个逻辑,第二次插入我们会先让25跟有序表中最后一个元素比较,很明显25是要比17大的,所以我们要将25给插入到17的后面。
注意,这儿我是按照从小到大的顺序来对待排序数组进行排序的,当然,如果是按照从大到小的顺序来排序的话,那么这一次插入25就要被插入到有序表最前面的那个位置上了。
接着,我们再来看一下第三次插入,第三次插入不用我说,想必大家都已经知道是要将无序表中的第一个元素14插入到有序表中的适当位置去了吧!
紧接着,我们再来看一下第四次插入,同上,第四次插入得将无序表中的第一个元素20插入到有序表中的适当位置去。
最后,我们来看一下第五次插入,很明显,第五次插入是要将无序表中的第一个元素9插入到有序表中的适当位置去。
现在大家应该搞清楚插入排序的基本思想了吧!是不是还是挺简单的啊!至少我认为与冒泡排序的排序思想比起来,插入排序还是更好理解一点的。
不知道大家有没有发现这一点,就是我们待排序数组一共有6个元素,插入排序完其实我们一共得插入5次。为什么是5次呢?因为第一个元素我们认为它就是一个有序表,因此无论怎么排,它都是有序的,而这也就是说我们不需要为它找寻适当位置并进行插入。所以,实际上,我们是要为后面的5个数找寻适当位置并进行插入。
至此,关于插入排序的基本思想,那我就给大家讲解到这里了。至于接下来要干嘛,相信大家也都知道了,无非就是来编写具体代码用以实现插入排序。
代码实现
。。。