java - 为什么这种插入排序方法会给出错误的输出?

标签 java insertion-sort

为什么这个插入排序给了我错误的答案,而当我按照注释行指定的方式做时却得到了正确的答案?有什么区别?

    public class Solution
    {

    public static void main(String[] args) 
    {

    Scanner s=new Scanner(System.in);
    int i,j,n,sk=0; //consider another variable k
    int a[]=new int[20];
    n=s.nextInt();
    for(i=0;i<n;i++)
        a[i]=s.nextInt();
    for(i=1;i<n;i++)
    {   j=i-1;
        //adding k=a[i]
    while((j>=0)&&a[j]>a[i]) //a[j]>k instead of the condition a[j]>a[i]
    {   sk++;
        a[j+1]=a[j];
        j--;
    }
       a[j+1]=a[i];
       //a[j+1]=k instead of the previous line.       
    }
    for(i=0;i<n;i++)
    System.out.println(a[i]);
    }
    }

最佳答案

这一行a[j+1]=a[j]

当 i = 1、j = 0 时,考虑数组 = {5,2,3},

 while((j>=0)&&a[j]>a[i]) //a[j]>k instead of the condition a[j]>a[i]
        {   sk++;
        a[j+1]=a[j];   // a[1] = a[0]
            j--;   // j becomes -1 out of the loop 
        }
  // Array becomes {5,5,3} after while loop, we lost 2 
           a[j+1]=a[i];   // again  a[0] is just getting initialized to a[1] 
                                           //which are same
           //a[j+1]=k instead of the previous line.  **// K will have previous 
                                              a[1]**      
        }

当你执行 a[j+1]=a[j] 时,你已经更新了 a[1],然后在 while 循环之外你再次分配 a[1] = a[1],但是,k 将存储之前的值a[1] 值,不是更新后的值

关于java - 为什么这种插入排序方法会给出错误的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45742348/

相关文章:

java - Android:startActivity() 适用于一个 Activity ,但不适用于另一个 Activity

c - C 插入排序中的段错误

c - 字符串的插入排序(降序)

java - toStringBuilder 导致问题

java - 一个简单的多线程闹钟

java - 线程对方法的请求计数器

c++ - 这是插入排序吗?

java - Hadoop Spark : How to make distinct of elements in JavaRDD?

java - 每当我调用 "InsertionSort"方法时,输出文件都显示为空?我应该在哪里调用这个方法?

c - 给定一个由偶数和奇数组成的数组。先对数组进行排序,然后是赔率。数字的顺序不能改变