Java Arraylist插入排序不正常?

Java Arraylist插入排序不正常?,java,sorting,arraylist,Java,Sorting,Arraylist,我相当肯定我的算法是正确的,代码是正确的,但我似乎无法理解为什么它不能正确地对我的数字进行排序 我试图用ArrayList制作一个插入排序程序,但它似乎不能正常工作 这是我的密码: import java.util.ArrayList; public class NewInsertionSort { public static void main(String[] args) { ArrayList <Integer> Array = new Arra

我相当肯定我的算法是正确的,代码是正确的,但我似乎无法理解为什么它不能正确地对我的数字进行排序

我试图用ArrayList制作一个插入排序程序,但它似乎不能正常工作

这是我的密码:

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)); 
        }


    }

}
import java.util.ArrayList;
公共类NewInsertionSort{
公共静态void main(字符串[]args){
ArrayList数组=新的ArrayList();
数组。添加(1);
增加(52);
数组。添加(21);
增加(45);
增加(27);
整数数;
整数锁;
整数num2;
对于(num2=1;num2=0)和(Array.get(num)
如果有任何人有任何建议和援助,给予,非常感谢,所有的帮助是感激的

你怎么能说“代码是正确的”并在后面加上“但我似乎不明白为什么它不能正确地对我的数字排序。”

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

Array.set(num+1,num);
你可能是说:

Array.set(num+1,Array.get(num));
在内部for循环之后,您永远不会将存储在
lock
中的值放回数组中

我尽量不给你一个完整的答案,因为SO不是来帮你做作业的。祝你好运

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

数组.set(num+1,num)

你可能是说:

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

yes是正确的,并且在内部循环结束后,您必须使用lock值更新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);
    }
Integer-num;
整数锁;
整数num2;
对于(num2=1;num2=0)和(Array.get(num)
Integer
应该是
int
,它应该是数组而不是
array
@TheProgrammerG,但我修正了这个问题,它仍然只是打印无序列表…使用LinkedList而不是ArrayList。@eg04lt3r不,不要。
LinkedList
中基于索引的get和set是
O(n)
;它们是
ArrayList
Array.set(num+1,num)中的
O(1)
正在将
num+1
-th元素的值设置为
num
,而不是
num
-th元素的值。您的意思可能是
Array.set(num+1,Array.get(num))