常见排序算法学习笔记

一、选择排序

为什么第一个是选择排序呢?因为这是常见排序中,最简单,最容易上手,最容易入门的算法。所以,选择排序完完全全可以把他当成排序算法的入门。
这个算法的思想很简单,也是绝大多数没有接触过编程的人可以想到的一种排序算法。比如下面这组数,让你来排序你会怎么排呢?

5,8,2,6,4,7,2,1,3,9

大多数人想到的便是,从第一个数开始,不断的与后面的数比较,然后得到这串数字中最小的数。后面就是不断的循环,直到所有数都排好了。所以这串数字第一轮排序后的结果如下:

1,8,2,6,4,7,2,5,3,9

因为第一次是拿5跟8比较,结果发现5比8小,那么此时的最小值就是5,第二次是拿5跟2比较,结果发现5比2大,那么此时的最小值就是2,第三次是拿2跟6比较(此时我们发现原本是拿5去跟后面的数比较,怎么到这变成2了,因为2成为了在这一轮当前比较的过程中最小的数了。所以拿最小的数来与后面的数比较。),结果发现2比6大,那么此时的最小值就是2,以此类推。所以第一轮排序完成后,最小的数就排在了第一位,这样就意味着,下一轮的排序,排在第一位的数,用不着参加后面的排序了。

二、冒泡排序

将这个排序算法放在第二位是有两个原因:第一是因为这个算法很有名,很容易被人记住有一个叫冒泡排序的排序算法。第二是因为这个算很简单,就像下面这个图一样,基本看了这个图就懂了这个算法的思想了。
常见排序算法学习笔记_第1张图片
这个算法呢,就是典型的两两相邻比较,就是相邻的两个数进行比大小,如果大的数在左边,小的数在右边,那么两个数的位置就进行交换,然后再拿大的数与右边的数进行比较。第一轮比较下来后,最大的那个数就会被换到最右边。这个算法如果有时候记得不是很清楚的话,会跟选择排序给记混了。那么冒泡排序跟选择排序其中一个区别在于第一轮比较后,冒泡排序是找出了最大值,而选择排序是找出了最小值,所以我为了方便我自己记忆,那就是选小冒大。还有一个区别就是,冒泡排序是两两比较,而选择排序是轮着与后面的数比较,所以我为了方便我自己记忆,那就是选轮冒两

三、插入排序

插入排序简称"插排",又称"插牌"。就如同斗地主一般,假如你目前手上已经有三张牌,它的顺序如下

4,6,7

然后你在拿到第四张牌为5的时候,你会怎么放?那么一般情况下都会将5这张牌插入到4和6之间,这就叫插牌,也叫插排
那么插入排序的算法思想,跟上述的思想是一模一样的。那就是从数组中的第二个数开始,往前面的数比较,如果前面的数小于要插入的数,那就将要插入的数跟前面的数进行交换。直到前面已经没有没被排序过的数。那么插排就算完成。

四、希尔排序

希尔排序,是插入排序的进化版。同时也是一个不怎么好面试和考试的排序,因为希尔排序,需要定义一个间隔数,但是这个间隔数又有多种计算方法。假如有如下图的一串数组
在这里插入图片描述
上图总共15个数,假如我们设置一个间隔数为4。那么就是将上述的数组相隔每四个数就将这个数给取出来,如上图标红的位置所示,首先从第一个数位置开始,然后就是第一个数的位置+4(间隔数),再然后就是第一个数的位置+4(间隔数)+4(间隔数),最好就是第一个数的位置+4(间隔数)+4(间隔数)+4(间隔数)。其实就是将9,5,10,1这一组数取出来,然后进行一次插入排序。排完后放回原数组,然后从第二个数的位置开始,然后就是第二个数的位置+4,再然后就是第二个数的位置+4+4,最好就是第二个数的位置+4+4+4。… 然后从第三个数开始…,第四个数开始… 以此类推,走完第一轮的希尔排序。那么第二轮怎么走呢?那就是通过原间隔数除二得到一个新的间隔数,然后用这个新的间隔数走第一轮的希尔排序。直到直到这个间隔数为1的时候,那就是走最后一轮的排序了。其实间隔为1的时候执行的排序跟插入排序就没有任何区别了。只不过在走随后一轮的排序的时候。数组里面的数据已经是相对有序了。

你可能感兴趣的:(基础算法,学习,排序算法,学习,算法)