为了账号安全,请及时绑定邮箱和手机立即绑定

为什么'i'的值打印3次,在插入排序算法中它应该只打印1次

为什么'i'的值打印3次,在插入排序算法中它应该只打印1次

茅侃侃 2021-12-01 16:29:53
//插入排序程序我正在检查该值打印了多少次 //当我输入 2 和 1 时,我的值打印了 3 次,但是当我输入 2 个值时它应该必须打印 1 次公共类插入排序{static void insertsort(int arr[]){    for(int i=1;i<arr.length;i++) {        for(int j=i-1;j>=0;) {            System.out.println("i is"+i);            if(arr[j]>arr[i] ) {                int temp=arr[j];  //for swapping                 arr[j]=arr[i];                arr[i]=temp;                i--;            }else {                j--;            }        }    }    for(int i=0;i<2;i++) {    System.out.println(arr[i]);    }}public static void main(String args[]) {    int arr[]=new int[2];    System.out.println("please Enter the value");    Scanner sc= new Scanner(System.in);    for(int i=0;i<2;i++) {        arr[i]=sc.nextInt();    }    insertsort( arr);}}输出请输入值 2 1 i is1 i is0 i is1 1 2
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

本println应是内部循环之前。


for(int i=1;i<arr.length;i++) {

    System.out.println("i is"+i);

    for(int j=i-1;j>=0;) {

您只希望i每次i更新时打印一次的值。如果你把它放在内循环中,那么每个值i都会被打印多次,因为内循环可以为每个值迭代多次i。


查看完整回答
反对 回复 2021-12-01
?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

对于值 2,1,它打印 3 次,因为对于 i = 1, j= 0,它打印1 次然后进入 if 条件并使 i=0 的值和 j 的值没有变化,现在该值为 1 2 of数组,因为它是交换。再次检查满足 for 循环条件的 j>=0 的条件,它第二次进入打印但这次它转到 else 条件,减少 j 的值使其等于 j=-1,检查条件并循环退出内循环。

此时我们有 i = 0 的值,现在它去外循环增加 i 的值,即使 i = 1 的值,检查条件然后进入内循环,j = 0,检查条件然后打印第 3 次进入 else 条件,减少 j 的值,打破内循环,然后是外循环。

尝试进行试运行或使用调试器它会有所帮助!


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信