我编写的这段排序代码是选择排序还是其他排序算法?
排序算法类型判定结论
你编写的代码属于实现不佳的选择排序变体,不属于新的排序算法,核心逻辑仍然是选择排序的范畴,只是交换操作的实现方式做了错误的调整。
逻辑对比说明
标准选择排序的核心逻辑
- 每轮外层循环固定已排序区间的末尾下标i
- 内层循环遍历整个未排序区间,全程仅记录最小元素的下标,不做交换
- 内层循环结束后,仅执行1次交换操作,把找到的最小元素和i位置的元素交换
- 单轮内层循环最多仅产生1次元素交换
你的实现和标准逻辑的差异
你在内层循环中每次碰到比array[i]小的元素就立刻执行交换,相当于单轮内层循环最多会触发array.length - i次交换操作,大幅提升了不必要的交换开销,但核心逻辑仍然是每轮为i位置从未排序区间选择合适的最小元素,所以本质还是选择排序的变体。
两种实现的代码对比
你当前的实现
public static int[] selectionSort(int[] array) { for (int i = 0; i < array.length; i++) { for (int j = i; j < array.length; j++) { int smallest = array[i]; if (array[j] < smallest) { array[i] = array[j]; array[j] = smallest; } } } return array; }
标准选择排序实现
public static int[] standardSelectionSort(int[] array) { for (int i = 0; i < array.length; i++) { // 先记录最小元素下标,遍历全程不交换 int minIndex = i; for (int j = i; j < array.length; j++) { if (array[j] < array[minIndex]) { minIndex = j; } } // 内层循环结束后仅做1次交换 int temp = array[i]; array[i] = array[minIndex]; array[minIndex] = temp; } return array; }
内容的提问来源于stack exchange,提问作者iamlearningmath
相关产品推荐
相关产品推荐

