排序算法

64 阅读2分钟

插入排序

直接插入排序O(n2) 与 折半插入排序O(n2)(减少了关键字之间的比较,但记录的移动次数不变)与希尔排序O(n 3/2)(将相隔某个分量的增量(5,3,1)划为一组进行比较,进行插入)

1将待排序的记录存放于数组中(该数组内已含部分有序序列) 2查找到在有序序列中的插入位置 然后从插入记录

快速排序

 笨笨今天才大概把快排搞明白,基本上就是取第一个数为初始比较值,然后将小于这个值的数放在这个数的前面,将大于这个值的数放在其后面,然后分块比较,前面的和后面的分别按照之前的方法进行排序。切记,初始是从右往左。

快速排序属于交换排序。 交换排序分为 冒泡排序O(n2)和快速排序O(n2)

堆排序

方法:找非终端结点,从上往下,从右往左。分为大根堆和小根堆堆排序是将其看成一棵完全二叉树的顺序存储结构,通过双亲与孩子节点之间的比较选择出所需要的数,然后放在根结点处,然后再将其依次放在叶子节点处

堆排序属于选择排序中的树形选择排序。选择排序包括:简单选择排序O(n2),树形选择排序,堆排序O(nlog2n)。

其他排序方法

归并排序 基数排序(多关键字的排序和链式基数排序) 以上都是内部排序是有一些外部排序

关于讨论排序是否稳定:稳定即为是否改变排序之前的数据顺序 稳定的排序有:冒泡排序,插入排序,归并排序,基数排序,简单选择排序 不稳定的排序:快速排序,希尔排序,堆排序。 好像跟字节老师上课讲的有点出入,但还是照着我自己的写了。

关于时间复杂度的讨论,后续整理出来会进行重新编辑