排序

冒泡排序

  冒泡排序只需两个循环即可实现,外循环从1到n依次递减,内循环执行n-i长度的两两对比交换。

  for i in range(1,n):

      for j in range(1,n-i):

           对比j前后两个数据大小

选择排序

和冒泡一样,两个循环,不过内循环变成寻找n-i长度内的最小/大值,然后和相应位置进行交换。

直接插入排序(小数据,基本有序)

对于有序数列,新的数据直接插入到序列中,但是对于较大规模的数据,可以使用希尔排序。

希尔排序(改进的直接插入排序)

将数据进行分组,间隔取数分为不同的组,对不同的组分别进行直接插入排序,逐步缩小增量,(2^n-1,...,1)

归并排序

顾名思义,使用归并算法,将数据两个分组,逐步分组至不能再进行分组,两两对比,然后再合并。

堆排序

借用完全二叉树的思想来实现,当使用最大堆时,要求父节点大于子节点,首先建堆满足条件,此时就得到了最大值(即根节点),然后将最大值放到数组最后,然后对前面的继续使用堆排序,即可得到有序数列。

快速排序

选择一个主元,使得左边的数据都比它小,有的数据都比它大,方法大致为从两端开始,左边找比它大的和右边比它小的,然后这两个交换,直到两个标志相遇,然后相遇点和主元交换即可,然后对两边分别使用快速排序即可得到有序数列。

##未完待续

原文地址:https://www.cnblogs.com/xbyfight/p/11522731.html