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

Java实现插入排序并仅打印交换后的无重复排序过程

插入排序代码优化:解决重复输出问题

问题说明

现有Java插入排序代码存在重复输出问题,需要修改为:

  • 仅在元素交换发生时打印当前数组,消除重复内容
  • 输入已排序数组时,无任何输出

原代码

import java.util.Scanner;
import java.util.Arrays;

public class Main {

    public static void main(String[] args) {
        int i, temp, n, j ,num, array[], counter, k;
        Scanner input = new Scanner(System.in);
        num = input.nextInt();
        array = new int[num];
        n = array.length;  
        temp = 0;  
        for (counter = 0; counter < num; counter++)
        array[counter] = input.nextInt();

        for (i = 1; i < array.length; i++) {
            for (j = i; j > 0; j--) {
                if (array[j - 1] > array[j]) {
                    temp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = temp;
                }
                for(k=0; k<n; k++)System.out.print(array[k]+ " ");
                System.out.print("\n");
            }
        }
    }
}

问题根源

原代码内层循环每次迭代都会执行打印,无论是否发生交换,导致大量重复输出;同时输入已排序数组时,无交换却仍会多次打印数组,不符合要求。

修复后的代码

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        int i, temp, n, j, num, array[], counter, k;
        Scanner input = new Scanner(System.in);
        num = input.nextInt();
        array = new int[num];
        n = array.length;
        
        // 读取输入数组
        for (counter = 0; counter < num; counter++) {
            array[counter] = input.nextInt();
        }

        for (i = 1; i < array.length; i++) {
            for (j = i; j > 0; j--) {
                if (array[j - 1] > array[j]) {
                    // 执行元素交换
                    temp = array[j];
                    array[j] = array[j - 1];
                    array[j - 1] = temp;
                    
                    // 仅交换后打印数组,避免末尾空格
                    for (k = 0; k < n; k++) {
                        System.out.print(array[k]);
                        if (k != n - 1) {
                            System.out.print(" ");
                        }
                    }
                    System.out.println();
                } else {
                    // 无交换说明元素已在正确位置,提前终止内层循环
                    break;
                }
            }
        }
        input.close();
    }
}

关键修改点

  1. 打印逻辑限制:将数组打印代码移至交换操作的if块内,确保只有交换发生时才输出。
  2. 格式修正:优化打印逻辑,移除数组末尾的多余空格,匹配期望输出格式。
  3. 效率提升:当无交换发生时,直接跳出内层循环,减少不必要的迭代。

验证结果

  • 测试输入(已排序数组):

    5
    1 2 3 4 5
    

    输出:无任何内容,符合要求。

  • 测试输入(未排序数组):

    8
    8 4 3 7 6 5 2 1
    

    输出为每次交换后的数组状态,无重复内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 08:55:17