数据结构与算法—排序

数据结构与算法—排序

开发工具与关键技术:Visual Studio 2015、算法
作者:易金亮
撰写时间:2020.05.18

前段时间学习了数据结构与算法这一课程,下面我们对数据结构与算法这一课程中的排序一章进行总结,排序分为插入排序、交换排序和选择排序三种,下面我们就来说说这三种排序。
首先是插入排序,也就是直接插入排序,直接插入排序的基本思想是把准备排序的数列分成两类,一类认为是有序表,在起始的时候认为有序表中只包含一个元素,一类是无序表,剩下的n-1个元素在无序表中,在排序的过程中每次从无序表中取出第一个元素,将它插入到有序表中的适当位置,使之成为新的有序表,这个适当位置是通过比较得来的,每一趟都是将一个记录插入到前面的有序段中,直到所有的记录都插入到有序段中,直接插入排序需进行n-1趟才能将全部数据排完。直接插入排序的算法如下图所示:
数据结构与算法—排序_第1张图片
如上图所示,这就是直接插入排序的算法,其中2是待排序的数列,n是指对n个数进行排序,我们首先0作为监视哨,然后2到小于等于n,就是2到n,在这里可以是小于等于n-1,这个就得看我们定义数组时定义多大了。然后首先备份数据,将r[i]复制到r[0]这个监视哨,接着j管的是已排好序的数列,i管的是未排好序的数列,那么我们已排好序的总在未排好序的前一个,也就是说未排好序的要在已排好序的下一个,然后我们比较r[0],r[0]其实就是r[i],将关键字大于r[i].key的记录后移,直到未排好序的数据要大于等于已排好序的数据,这个位置的下一个位置就是我们要插入的位置。
然后是交换排序,也就是快速排序,其基本思想是从待排序序列的n个记录中任取一个记录Ri作为基准记录,以基准记录为界限,将待排序序列划分成两个子序列,所有关键字小于Ki的记录移到Ri的前面,所有关键字大于Ki的记录移到Ri的后面,这个过程称作一趟快速排序;然后用同样的方法对两个子序列排序,得到四个子序列;依次类推,直到每个子序列只有一个记录为止,此时就得到n个记录的有序序列。一趟快速排序的算法描述如下截图所示:
数据结构与算法—排序_第2张图片
如上截图所示就是一套完整的快速排序算法,首先我们要把基准记录备份,当i 数据结构与算法—排序_第3张图片
如上截图所示是完整的快速排序递归算法,其中r是我们待排序的记录,l和h是区域,我们要对l和h之间的数进行排序,一趟快速排序是返回一个基准记录所在的位置,接下来我们就到l到k-1之间继续进行快速排序,然后到k-1到h之间继续进行递归排序,直到所有子区间为一个数据为止。
最后是选择排序,其基本思想是每一趟从待排序记录中选出关键字最小的记录,按顺序放到已排好序的子序列中,直到全部记录排序完毕。选择排序有两种:直接选择排序和堆排序。这里主要说一下直接选择排序,其算法描述如下截图所示:
数据结构与算法—排序_第4张图片
如上截图所示是直接选择排序的算法,其中r是待排序的数列,n是n个长度,i是我们已排好序的我们要选择的那个下标,我们首先把i给过k,可以看到这个循环j是从i的下一个开始,不管排什么位置,j都是没排好序的,j从下一个位置开始然后一直到最后一个元素,如果后面这个元素比r[k]要小,这时就说明k不再指向最小的,k保存当前找到的最小关键字的记录位置。如果k和i不相等,我们就将r[k]和r[i]进行交换,这样就能直接选择到相应的排序位置,这就是直接选择排序。

你可能感兴趣的:(排序算法)