00:00
那各位同学就是关于数组和切片的这些内容呢,我们就全部给大家介绍完毕了,好吧,呃,那数组和切片的后边在项目里面的时候,我们还会反复的去用它。然后呢,在那个地方我们还会加深对数组和切片的一个实际的应用,下面呢,我们来学习下一个章节叫什么呢?叫做排序和查找。好叫排序和查找,我把这个整理一下。来,我们看看排序和查找的这个内容有哪些。打开我们的幻灯片。那这一讲呢,我们重点给大家介绍排序和查找,当然排序呢,我们指的是数组的排序,查找呢也是针对数组的查找,好我们来看一下,我们先对排序做一个基本的介绍,好我们新开一个,新开一个章节。
01:01
和查找。给他一个标题。给他一个标题。第八章。对吧,这是我们的第八章,那么我们先来看一个排序的基本介绍。我们把排序呢做一个基本的介绍给大家说一下。好,基本基本介绍。走一个,给他一个标题二。那么什么是排序呢?我们先来看一下它的基本概念,所谓排序是指将一群数据当然最好叫一组,咱们别别叫群好吧?将将一组数据。一指定的顺序排列的过程,我们就把它叫做排序,那排序呢,又分成两大类,一类我们把它叫内部排序,一类我们把它叫做外部排序。那么什么叫内部排序呢?所谓内部排序就是将要处理的所有数据都加载到加载到内存进行排序,也就是说它的这个排序工作不需要借助。
02:12
呃,这个文件也就是他一次性把所有数据放到内存里面去排就可以了。这种呢,一般来讲数据量都比较小,会使用到内部排序,你比如说我们常见的交换式排序法,选择排序和操作排序,这些都属于内部排序。还有一种呢,就是外部排序,那什么时候会用到外部排序呢?就是我们的数据量比较大,你比如说我们要针对这个。1000亿个数据,1000亿或者1万亿数据进行排序,那么你把这些数据一次性加载到内存里面,加载不了,因为内存不够。对吧,这时呢,往往会借助外部存储进行排序,比如说会用这个文件进行合合并排序,你比如说我先调一部分数据,先把这一部分的数据的顺序排好,再调第二部分数据再排好,最后呢,把这一排好的数据一次性的输入到文件里面去保存起来,这时我们就会用到外部排序。
03:16
那么外部排序和内部排序最大的区别就是是不是一次性的将数加入加载内存进行排序。啊,内部排序它是一次性就搞定,它不需要借助外部的存储,而外部排序呢,因为数据量过大,往往都会。先加载一部分,排完了过后再加载第二部分,最后把它合并起来。这个呢就叫合并排序,比如说合并排序,直接合并排序法都会用到外,这都属于外部排序。这是它的一个基本介绍啊,那我们把这块呢做一个说明,就是排序的基本介绍,我们罗列到笔记里边去。好,这块我就直接把它。
04:00
诶,放到这里面去好吧。直接放到这里面就完了。大家了解一下,那再看排序,交换式排序有哪些呢?这个排序这个我们程序里面编程里面排序的很多啊,方法非常的多,那交换排序就属于内部排序。那么在交换排序里面呢,用的比较多的一个叫冒泡排序,叫bubble salt,还有一个人叫快速排序,叫quick salt,这些都是属于交换的,为什么呢?因为它都是把数据加加载进去,根据你的大小不一样,然后呢进行一个排序,能理解吧,好,这是交换式排序法,我也把它放到笔记里面去,大家了解一下,就交换式排序里面用的比较多的经典的一个是冒泡,一个是快速,那么冒泡呢,是我们要重点讲解的。我把这一块也放到笔记里面来,好做一个了解。好,这是交换排序。那现在呢,我们再往下边看,除了交换排序,还有呢,就是我们重点讲的冒泡排序,就说交换式排序法,我们重点就讲这个冒泡排序,好吧,什么叫冒泡呢?同学们简单的了解一下。
05:16
冒泡排序,它是指的基本事项,是通过对排列的数数列从后向前,从下标较大的元素开始,依次相互比较相邻元素的排序码,如发现逆序,则交换使排序码较小的元素逐渐从后部向前移动。然后就像水泡一样向上冒。诶,然后下面又说了什么?因为排序过程各元素不断接近自己的位置,如果在一趟比较下来没有进行交换,则说明有序,因此要在排序过程中设置一个flag标志进行交换,是否进行交换过,从而减少不必要的比较,这个呢,它是属于优化的东西。它属于优化的东西。
06:00
对吧,而且呢,当你听完这个介绍过后,你会你会发现不知道他在说什么,对吧,各位同学你是不是感觉到,诶,他不知道在讲什么东西,那怎么办呢?好同学们,我给大家来做一个通俗易懂的讲解。好,我先把它放在这里好不好,不管他说的好不好懂,但是呢,我还是把它放放过来。好,诶,这个地方。这个地方也是它的一个基本介绍吧。这个地方也是它的一个基本介绍。这是怎么回事儿?好,重新再把那个截过来。这个是对冒泡排序的一个说明。哎,是不是已经把它放好了呀。好,已已经放好了,对吧,已经放好了。那下面呢,我们再来看一个具体的这个冒泡的过程,你比如说看这个数吧,相对形象一点,他说这是一个数组。
07:01
这是一个数组,然后呢,下面再有另外的怎么怎么一次性的,你看最后第一趟就把最大的排在上面去了。然后呢,依次把第二次把88排到这儿,呃,然后呢,第三次把79排在这,以此类推,最后呢,第六趟结束的时候,把整个这个数据都排好了,但是这个讲解的说实话讲解的特别不好,就是这个光给你们看一个这图啊,其实同学们很难理解这个是怎么回事。对吧,这个是怎怎么回事,基基本上就说你看完这个图也不知道冒泡到底是一个什么样的过程,那这样子啊,我为了让大家彻底的理解这个冒泡排序呢,我们举一个。案例,我们就针对这个案例来给大家详细的介绍冒泡排序法到底是怎么样。排成一个有序数的,那么下面我们举的这个案例呢?来说明这个冒泡排序,冒泡排序来说明这个冒泡排序法。
08:03
冒泡。对吧?我们来说明冒泡排排序法,首先呢,这有五个数据,二,四,六,九,八,零,五七和13,我们用冒泡排序法将其排成一个从小到大的数列,注意我们写的是从小到大,也也就是说倒时间呢,第一个元素是小的,最后那个元素是最大的。那么关于这个的分析呢,各位同学我们画一个图来帮助大家理解。好,我先把这个冒泡排序法的这个呃示意图给大家画一下,这块同学们一定要注意啊,冒泡排序法,如果你不了解冒泡排序法它到底是什么规则,那这个代码你是肯定写不出来的。所以说我经常给同学们交流,我说同学们,为什么你们在面试的时候,面试官出一个冒泡排序法,大家写不出来呢?为什么容易忘掉呢?其根本原因就是没有把冒泡排序法的本质掌握到。
09:05
所以说有时候你去找一个同学,说让他写一个冒泡排序法,他写不出来。最后你慢慢问问问问到最终你会发现,其实。根本的原因他是没有把冒泡的规则搞清楚,就究竟冒泡他是怎么玩的没搞清楚,因此代码写不出来。所以说我经常讲,我们说编程,他其实一直在做这样一件事情,我在开篇的时候就说了,编程其实一在做这样的,就是你有个思路,你有一个思路或者叫思想。你有思想,然后呢,把这个思想转成你的代码,这个就叫编程。如果你本身。在编持的时候,没有自己的思路,或者说没有自己的思想,你是不可能写出代码的。你写出代码主要就是你的写代码这块呢,主要是语法,其实语法并不难,对吧,关键就是要有思路啊,那这样子啊,同学们我们就不说废话了,我们呢,用Excel表把这个交换交换这个排序法冒泡的它的一个规则给大家画出来理解一下。
10:12
好,这块我们先说到这里。
我来说两句