You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

我编写的这段排序代码是选择排序还是其他排序算法?

排序算法类型判定结论

你编写的代码属于实现不佳的选择排序变体,不属于新的排序算法,核心逻辑仍然是选择排序的范畴,只是交换操作的实现方式做了错误的调整。


逻辑对比说明

标准选择排序的核心逻辑

  • 每轮外层循环固定已排序区间的末尾下标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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:36:04