请问下述代码实现的排序算法属于插入排序吗?还是其他算法?
排序实现类型判定解答
你提供的实现代码
def insertionsort(ar): j = None for i in range(0, len(ar)): j = i + 1 while j != len(ar): if ar[j] < ar[i]: ar[j], ar[i] = ar[i], ar[j] j += 1 return ar
核心结论
该实现不能被称为插入排序,属于未优化的选择排序变体,具体差异如下:
- 和标准插入排序的核心区别:
标准插入排序的核心逻辑是从右侧未排序区间取待插入元素,向前遍历左侧有序区间做移位插入,不会用左侧有序区间的元素和右侧所有元素逐一比较;且输入完全有序时标准插入排序的时间复杂度可优化到O(n),你的实现无论输入是否有序都需要执行O(n²)次比较,最好情况时间复杂度也是O(n²)。 - 和标准选择排序的关联:
你的实现和选择排序的核心目标一致——每次外层循环都为i位置确定整个数组中第i小的元素,执行完第i次循环后左侧[0,i]区间必然有序。唯一的差异是标准选择排序会先遍历完右侧所有元素找到最小值下标,最后仅做1次交换,你的实现是每遇到更小的元素就当场交换,交换次数更多,实际运行效率低于标准选择排序。
补充说明
你提到的「排序过程中左侧子数组始终保持有序」是很多O(n²)排序的共性特征,不能作为判定插入排序的依据,插入排序的核心判定点是「取右侧未排序元素插入左侧有序区间」的逻辑。
内容的提问来源于stack exchange,提问作者Eklavya Shukla
相关产品推荐
相关产品推荐

