相同点: 冒泡排序和插入排序都是把数组分成两块,一块是已排好序,剩下的是未排好序。按照标准的时间复杂度和空间复杂度来算,两个算法都是O(n^2)时间复杂度,和常数空间复杂度。两个算法都是通过一步一步的移动元素达到最后的位置。
有两点差异我比较关注:元素比较的次数和元素移动的次数。
元素比较次数可以理解为时间复杂度,我理解通过标准时间复杂度算出来的是最坏的情况,所以可以更细化下其他的情况。
再比较元素比较次数之前先看下元素移动的次数,因为两个算法都会通过一步一步移动元素的方法来让元素达到它最终的位置。显而易见,两个算法元素移动次数是相同的。因为元素都是一步一步移动,而且移动方向都是单向。
再看比较次数,插入排序的每次比较都会伴随原始移动,也就是说每次比较都会对元素到达它最终的位置有作用。但是冒泡排序中可能存在某次比较并不移动元素的情况。所以冒泡排序的比较次数是大于等于插入排序的。
综上得出结论,插入排序的性能是大于等于冒泡排序的。