冒泡排序:
思想:相邻两个元素要进行比较若前比后大要交换
优化:快排是冒泡排序的优化
冒泡排序的优化:1.若给定的数组全部都是排好序的那么此数组就一定不会进入交换定义一个标记即可
2.若给定的数组一部分是有序的我们可以标记最大有序位置即进入交换的位置然后改变循环的次数即可
选择排序:简单选择排序 堆排序
简单选择排序(select)思想:找最大的往后放,或者是找最小的往前放
堆排序:大根堆 父亲的值比孩子的都大
1.构建大根堆 从最下面的父亲结点开始向上调整
2.进行排序 此时根结点的值一定是最大的我们将根结点的值与最后一个结点的值进行交换 然后再调整
插入排序:思想:将待排序数组分为两部分一部分有序一部分无序将无序的元素插入到有序的元素中去
插入排序分为 1.直接插入排序
2.希尔排序
适用场合:元素个数少
在排序之前各个元素位置离最终排序位置不远的时候
希尔排序为什么跳着分组?
分组然后再插入
计数排序:
要求:元素分配的比较密集 元素出现的频率比较高时
思想:计数统计每个元素出现的次数(元素从小到大)先找到最小值和最大值 申请差值的计数器
快排:
思想:找一个值为中间值比其小的放左侧比其大的放右侧分成两部分依次执行
方法:1,挖坑填补法
定标准值
从前向后找比标准值大的向后放
从后向前找比标准值小的向前方
归并排序 思想:将多个已经排好序的数组进行排序
归并排序的适用场合:数据量大 可以求出数组中逆序对儿的个数