Arraylist插入排序不正常吗?

时间:2016-01-25 23:24:32

标签: java sorting arraylist

我很确定我的算法是正确的,代码是正确的,但我似乎无法弄清楚为什么它没有正确排序我的数字。

我正在尝试使用arraylists进行插入排序程序,但它似乎无法正常工作。

这是我的代码:

import java.util.ArrayList;


public class NewInsertionSort {

    public static void main(String[] args) {

        ArrayList <Integer> Array = new ArrayList <Integer>(); 
        Array.add(1);
        Array.add(52);
        Array.add(21);
        Array.add(45);
        Array.add(27); 


        Integer num; 
        Integer lock; 
        Integer num2; 
        for (num2 = 1; num2 < Array.size(); num2++) {
            lock = Array.get(num2 - 1);


            for (num = num2 - 1; (num >= 0) && (Array.get(num) < lock); num--){


                Array.set(num+1, num);

            } 
            lock = Array.get(num+1);  
        }

        for(int z=0;z < Array.size(); z++){
            System.out.println(Array.get(z)); 
        }


    }

}

如果有任何人有任何建议和帮助,非常感谢,所有的帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

你怎么能说“代码是正确的”并跟随“,但我似乎无法弄清楚为什么它没有正确排序我的数字。”?< / p>

在此行中,您将更改为索引num):

Array.set(num+1, num);

你可能意味着:

Array.set(num+1, Array.get(num));

在那个内部for循环之后,你永远不会把你在lock中存储的值放回到数组中。

我试图不给你一个完整的答案,因为你不是要为你做功课。祝你好运!

答案 1 :(得分:0)

  

在此行中,您将值更改为索引(num):

     

Array.set(num + 1,num);

     

你可能意味着:

     

Array.set(num + 1,Array.get(num));

KompjoeFriek是对的,你也必须在内循环结束后用锁定值更新i + 1元素

所以它一定是这样的:

    Integer num;
    Integer lock;
    Integer num2;

    for (num2 = 1; num2 < Array.size(); num2++) {
        lock = Array.get(num2);

        for (num = num2 - 1; (num >= 0) && (Array.get(num) < lock); num--) {
            Array.set(num + 1, Array.get(num));
        }
        Array.set(num + 1, lock);
    }