选择排序
简单选择排序详解
堆排序详解
交换排序
冒泡排序详解
快速排序详解
插入排序
直接插入排序详解
二分插入排序详解
希尔排序详解
归并排序详解
基数排序详解
稳定性相关问题:
首先要知道所谓稳定性指的是 r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前
算法名称 | 稳定性 |
冒泡排序 | 稳定 |
插入排序 | 稳定 |
归并排序 | 稳定 |
基数排序 | 稳定 |
选择排序 | 不稳定 |
快速排序 | 不稳定 |
希尔排序 | 不稳定 |
堆排序 | 不稳定 |
冒泡稳定的原因 在冒泡算法中当前元素大于后边元素才会交换位置 如果当前位置元素等于后边元素 位置是不发生改变的
插入排序 因为是遍历之前元素与之进行比较 插入在小于等于他元素的后边 所以也是稳定的
归并排序 在合并的时候是左边数组和右边数组进行比较 <=则放进去 所有也是稳定的
基数排序 采用队列先进先出的顺序 所以也是稳定的
排序算法的选择:
在数据量小的时候 使用那个我个人觉得都无所谓数据量小没有太大的差别
如果对稳定性有要求 可以使用冒泡 插入
如果对稳定性没要求 可以使用简单选择
在数据量大的时候
如果对稳定性有要求 可以使用归并排序
如果对稳定性没要求 可以使用堆排序
掌握程度问题:
冒泡 直接插入 简单选择 快排 这些都应该能做到能手写才行当然都能手写更好
特别是快排 面试出现频率高 而且jdk 自带的Arrays.sort() 方法用的就是快排