开发者学堂课程【GO 语言核心编程-基础语法、数组、切片、Map:数组排序的基本介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/625/detail/9645
数组排序的基本介绍
内容介绍
一、排序的介绍
二、冒泡排序
这章重点介绍排序和查找,这里排序和查找都是针对数组的。
一、排序的介绍
排序是将一组数据,依指定的顺序进行排列的过程。
排序分为两大类,内部排序和外部排序法。
1、内部排序
指将需要处理的所有数据都加载到内部存储器中进行排序,也就是说排序工作不需要借助文件,一次性把所有数据都放到内存中去进行排序就可以。这种一般来讲数据量都比较小,会使用到内部排序。比如常见的交换式排序法、选择式排序法和插入式排序法都是内部排序。
2、外部排序法
数据量过大,无法全部加载到内存中,包括(外部排序法和直接合并排序法)。比如说要对一千亿或者一万亿个数据进行排序,而数据一次性不能加载到内存,因为内存不够,则需要借助外部存储进行排序,就会用文件进行合并排序法,例如先调一部分的数据先进行排序好,再调一部分的数据再排好,最后将排好的数据合并起来一次性输入到文件里面保存起来,这时就会用到外部排序。内部排序和外部排序法最大的区别就是能不能一次性的把文件都加载到内存中。
3、交换式排序法
交换式排序属于内部排序法,是运用数据值比较后,依据判断规则对数据位置进行交换,以达到排序的目的。
交换式排序法又可分为两种:
(1)冒泡排序法(Bubble sort)
(2)快速排序法(Quick sort)
这两种都是交换式排序,因为他们都是把数据加载进去后,然后根据大小的不一样进行排序。交互式排序用到比较多的就是冒泡排序法和快速排序法,冒泡排序法是后面要重点讲解的。
二、冒泡排序
交换式排序法-冒泡排序法
冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素的排序码,若发现逆序则交换,使排序码较小的元素逐渐从后部移向前部(从下标较大的单元移向下标较小的单元),就像水底下的气泡一样逐渐向上冒。因为排序的过程中,各元素不断接近自己的位置,如果一趟比较下来没有进行过交换,就说明序列有序,因此要在排序过程中设置一个标志flag判断元素是否进行过交换。从而减少不必要的比较(这个属于优化)。
这里说明有点不好理解,下面进行通俗易懂的讲解,如下图演示了一个冒泡过程的例子:
最左边一列是一个数组,第一趟结束后把最大的90排在了第一,第二趟结束了就把第二个大的88排到了第二位,以此类推到第六趟整个数组就进行了一个从大到小的有序排列。
但这个图还是不能够说明冒泡排序的过程,为了更加理解这个案例,下面再进行举例来说明插入法,用这个案例来详细的介绍冒泡排序到底是怎么样。
冒泡排序案例:24, 69, 80, 57, 13使用冒泡排序法将其排成一个从小到大的有序数列。
接下面会画一下冒泡排序的示意图来具体理解冒泡排序法。这里要注意如果不理解冒泡排序是什么规则的话,那代码肯定是写不出来的,而编程一直都在做同一件事情,就是把有的思想转写成代码,如果在本身没有编程的思路,那么是不可能写出代码的。写代码主要是语法,语法也不难,关键要有思路。
