排序
冒泡排序
冒泡排序只需两个循环即可实现,外循环从1到n依次递减,内循环执行n-i长度的两两对比交换。
for i in range(1,n):
for j in range(1,n-i):
对比j前后两个数据大小
选择排序
和冒泡一样,两个循环,不过内循环变成寻找n-i长度内的最小/大值,然后和相应位置进行交换。
直接插入排序(小数据,基本有序)
对于有序数列,新的数据直接插入到序列中,但是对于较大规模的数据,可以使用希尔排序。
希尔排序(改进的直接插入排序)
将数据进行分组,间隔取数分为不同的组,对不同的组分别进行直接插入排序,逐步缩小增量,(2^n-1,...,1)
归并排序
顾名思义,使用归并算法,将数据两个分组,逐步分组至不能再进行分组,两两对比,然后再合并。
堆排序
借用完全二叉树的思想来实现,当使用最大堆时,要求父节点大于子节点,首先建堆满足条件,此时就得到了最大值(即根节点),然后将最大值放到数组最后,然后对前面的继续使用堆排序,即可得到有序数列。
快速排序
选择一个主元,使得左边的数据都比它小,有的数据都比它大,方法大致为从两端开始,左边找比它大的和右边比它小的,然后这两个交换,直到两个标志相遇,然后相遇点和主元交换即可,然后对两边分别使用快速排序即可得到有序数列。
##未完待续