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

请确认这段Java代码实现的是插入排序还是选择排序?

插入排序代码的确认与修正

你提供的代码核心逻辑属于插入排序,但存在冗余代码和可优化点,下面具体拆解说明:

1. 核心逻辑符合插入排序定义

插入排序的核心是:将未排序部分的当前元素,向前逐个与已排序序列元素比较,插入到合适位置。你的代码完全匹配这个逻辑:

  • 外层循环从i=1开始(默认第一个元素为已排序),取出current = arr[i]作为待插入元素
  • 内层循环从j=i-1向前遍历已排序序列,若current < arr[j]则交换位置,直到找到正确插入点

2. 代码中的问题与优化

冗余代码(直接删除即可)

if(current>arr[i]){
    current=arr[i];
}

这行毫无意义,因为current已经被赋值为arr[i],该判断永远不成立。

优化后的插入排序实现(减少交换次数)

原代码每次比较都交换元素,可改为先移动大元素,最后再插入current,效率更高:

public class InsertionSort {
    // 优化后的插入排序方法
    public static void insertionSort(int arr[]) {
        System.out.println();
        for (int i = 1; i < arr.length; i++) {
            int current = arr[i];
            int j = i - 1;
            // 将比current大的元素向后移动
            while (j >= 0 && current < arr[j]) {
                arr[j + 1] = arr[j];
                j--;
            }
            // 插入current到正确位置
            arr[j + 1] = current;
        }
        // 打印排序结果
        System.out.print("Sorted array: ");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }

    public static void main(String args[]) {
        System.out.print("Original array: ");
        int arr[] = {7, 8, 3, 1, 2};
        for (int num : arr) {
            System.out.print(num + " ");
        }
        insertionSort(arr);
    }
}

3. 插入排序与选择排序的快速区分

  • 插入排序:逐个将未排序元素插入到已排序序列的对应位置,类似整理手牌的过程
  • 选择排序:每次从待排序部分找出最值元素,放到已排序部分的末尾,核心是"选择最值"

内容的提问来源于stack exchange,提问作者user28471999

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:56:07