排序——数据结构(Summary)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaofen_7/article/details/82980401
总结自考过程中遇到的几种排序的思想,脑子很浆糊,所以总结一下这几个排序算法的思想,一开始接触这块,以后这儿会学到很多的! 直接插入排序:存在一个未排序的数列,每次从未排序数列中取出一个数放到已排序的数列中

手稿在这里插入图片描述

冒泡排序:每一趟气泡会将未排序的最大值放到自己对应的位置

手稿在这里插入图片描述

快速排序:每次将未排序数列的第一个数放到一个位置,使得未排序序列的前半拉都小于它,后半拉都大于它,不断的将未排序序列进行这样的操作

手稿在这里插入图片描述

选择排序:每次从未排序的数列中拿一个数,然后和其他未排序的数全部做比较,在两两比较的过程中找到最小的数,将这个数放到排好序的数列中,然后重复这样的操作

手稿在这里插入图片描述

堆排序:问题的关键 1.如何把一个数列建成一个(最大/最小)堆; 2.在排序时,将一个个数输出就会破坏这个堆,这时候如何将它重新建成一个新的堆。
问题1解决:将数列按层遍历的方式写成一个堆,然后按照要求自底向上调整堆,直至符合要求
问题2解决:破坏堆之后,取出最后一个节点,和剩余的部分从新建堆,自定向下的跳整

手稿:
在这里插入图片描述
当取出一个个元素(将排好序的数拿出后,剩余的部分就是不断的取出元素,重建堆)
在这里插入图片描述

有序序列的合并:这个算法的前提是已有两个排好序数列,然后对这两个数列,依次取值存放到两个变量中,通过这两个变量的比较,谁小就将这个变量的值放到新的数列中,放进去以后在从对应的数组中取值

手稿
在这里插入图片描述

二路归并:有一个未排序的数列,将这个数列从前到后,2个一组,分好组后,组内排序;然后在将一组组排好序的数列当做一个个元素,再从头到尾两两一组,再组内进行排序,最后整个排好的就有

手稿:二路归并的前提是有序序列的合并
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhaofen_7/article/details/82980401