算法练习bat----------07排序的稳定性和汇总

稳定性:假定有3,1,2,3,1,4,2,1

那么排完序就是1,1,1,2,2,3,3,4,那么稳定性就是能否保证上面的第一个3和第二个3,在排完序后先相对位置不变

  • 冒泡排序(能,O(N^2)):只要保证相同不交换就能保证稳定,例如:7,6,3,7,2,第一个7不断冒泡,遇到相同不交换,那么就能保证稳定性
  •  插入排序(能,O(N^2)):同样只要保证相同不交换即可,例如5,6,7数组,然后,来了一个6,6和7交换后,发现前一个也是6,那么结束插入
  • 选择排序(不能,O(N^2)):第一次从下标为0的开始下标为0的这个数与后面的n-1个进行比较;找出最小或者最大的放在下标为0的这个位置,例如5,5,5,5,4,0,1,那么第一次选择排序后,原先第一个5,就越过其他3个5,来到原先0 的位置

 

  • 归并排序(能,nlogN):只要保证左边相同的先放进入几个,例如左边3,3,4, 右边3,5,那么左边的两个3先放
  • 快速排序(不能,):
  • 堆排序:(不能,nlogN)

算法练习bat----------07排序的稳定性和汇总

综合排序:例如当样本量很大的时候,

如果数组里面存的是基本数据类型,那么使用快排(因为快排其O(nlogn)隐藏的常数因子项小),

如果里面存的是自定义的类型,如Student等,那么使用归并排序,当归并的过程中,划分的子数组长度<60,则这部分使用插入排序(因为在数据量<60的情况下,插入排序最快),因为可能需要保留稳定性,

 

算法练习bat----------07排序的稳定性和汇总