接下来我们看一下数据结构里面的专题叫排序,排序有哪些内容,首先排序的基本概念,各种排序的比较
1. 中间交换排序,对于交换排序有冒泡排序和快速排序
2. 选择排序
3. 插入排序
我们先来看排序的基本概念
什么叫排序?
有相关的概念我就不在这里重复了,给一组数据它是无序的,我们按照某个关键字对他进行排序,最终变成一个有序的就可以了.
看他的一种分类
什么叫内部排序,什么叫外部排序?
如果整个的排序都在内存中进行,那就叫内部排序,但是还有一种情况是数据量特别的大,大量的数据是存在硬盘里面的,我们要一次
加载内存里面,加不进来,周转不开,怎么办,仓库里面的东西太多,一下子放在车间放不下,那怎么办呢,内存中无法容纳全部数据,
需要借助外部存储设备实现,这叫外部排序,我们讲的肯定都是内部排序,我们讲的都是在内存里面进行的,这是第一点,知道有这个排序
下面有一个叫稳定排序,一个叫不稳定排序
什么叫稳定排序,什么叫不稳定排序,我们来看,比如说在这个排序之前,他现在是无序的,但是这里面有两个47,前面我们用黄色来标记,
后面我们用蓝色来标记,排玩序之后,这是不是有序了,那这两个47肯定是挨着了,并且每次都是这个样子,那他就是稳定的,如果他排完序
之后变成这个样子了,什么样子呢,蓝色本来是在后面的跑到前面了,前面的跑到后面去了,哪怕10次又一次是这个样子呢,他也是不稳定的,
但是你要记住,不管是稳定的还是不稳定的,他都是给你排序排好的,都排好序了,最终的结果都是有序的,只是要注意一个细节,有人说
这有意义吗,这很有意义,有时候我们没有这方面的要求,但是有时候我们有稳定性的要求,如果没有这个要求,无所谓,用哪一种都行,
有这个要求呢,就说大家想一下,举例子啊,我要按照学生的分数排序,但是1000个学生,他的分数肯定有一样的,那就默认的按照学号排序了,
相同分数按照学号排序,之前给了一个按照学号的,那分数可能就是这个样子,它是没有顺序的,但是这个学号是小,这个学号的是不是大啊,
我们希望排完序之后,如果他的分数一样,学号小的在前面,学号大的排在后面,如果有这个要求的话,那我们就从稳定的排序,那如果没有
这个要求,只要分数一样,谁先谁后无所谓,那不稳定的是不是也可以,这一点大家要知道了
还有一个叫比较的排序,和非比较的排序,排序应该是离不了比较的,为什么,他为什么排序,你像这几个数现在是无序的吧,你怎么就把它
变成有序了,你总要拿着56和34比较一下吧,比较谁大谁小,然后再看怎么交换,怎么移动啊,是不是要做这些操作啊,所以大部分的排序啊,
都是要基于比较的,都是离不了比较的,但是这个世界太大了,有些内容知识太多了,有时候有些排序是不需要比较的,这是另外一种思维,
大部分的排序都是基于比较的要先判断大小,再进行后一步操作,作为排序的依据,但是也有例外的啊,有些排序,比如计数排序,基数排序,
这个是不需要比较的
基于比较的排序我们又可以分为4大类:
1. 插入排序
2. 交换排序
3. 选择排序
4. 归并排序
冒泡就是交换的,选择就是选择的,插入就是插入的,你把这个3个最基本的掌握了,那你知道他们是基于什么的了
这是我们所说的一个内容
再往下看,看这张图吧,这张图我们就知道包括哪些内容了,排序算法包括比较排序和非比较排序,比较排序是占多数的
插入排序:比如我们这里又两个,最基本的是直接插入排序,他简单,他的效率低,他的完善一下,比如变成希尔排序了
选择排序:这个选择排序它是最基本的,效率低,简单,他的效率是不是低,完善一下,基于同一种思路,堆排序
交换排序:冒泡排序,这是最基本的,效率比较低,我们再完善一下,可能就成了快速排序了,
插入,选择,交换排序,是不是都有低级和高级之分,就是这些,三种基本排序,插入的,选择的,冒泡的
应该在插入排序里面还有另外一种排序,这个大家记住,一般来说是有八大排序类型,哪八大呢,
插入排序里面还有一个折半插入排序,这样一来比较排序里面就有八种排序,一共有8种了,
归并排序:
非比较排序里面就有计数排序,还有一个基数排序,这是一个总表,目前我先把这个表放到这儿,插入排序,选择排序,交换排序,
归并排序,这些是不是基于比较的,比如基数排序,他没有写计数排序,还有一个计数排序,有时间复杂度,有空间复杂度,有
稳定性,一会我们再来做相关的总结,而在这里我们先告诉大家这么一点,时间复杂度最高的是哪一个,是O(n2),n的平方,
估计两层循环的,这三个算法,是效率最低的三个,就是我们所说的直接插入,直接选择,冒泡排序,算法最简单,效率最低下,
但是我们学习的时候,是不是先从这个开始的,先学简单的,再学复杂的,简单的我们可以优化成后面复杂一些的,
建议大家这么多的排序,建议大家有限掌握着三个最基本的,然后重点来看一下后面快速的,因为它里面确实有内容要讲,
再看的话可以建议看看归并排序,因为归并里面也用到了递归,这一点和快速是一样的
建议优先掌握的是这三个:直接插入,简单选择,冒泡排序,快速排序
这就是我们关于排序的一些内容