Java中按数组排序列表的实现问题

Java中按数组排序列表的实现问题,java,arrays,sortedlist,Java,Arrays,Sortedlist,我写的类的add方法似乎有问题。。我想用数组制作一个SortedList,但我不知道问题出在哪里。这是我的代码: public class SortedList { private Integer[] elements; private int size; private int capacity; public SortedList(int cap) { elements = new Integer[cap]; if (c

我写的类的add方法似乎有问题。。我想用数组制作一个SortedList,但我不知道问题出在哪里。这是我的代码:

public class SortedList {

    private Integer[] elements;
    private int size;
    private int capacity;

    public SortedList(int cap) {

        elements = new Integer[cap];

        if (cap > 0)
        {
            cap = capacity;
        }
        else
            capacity = 10;

    }

    public boolean isEmpty()
    {
        return size == 0;
    }

    public boolean isFull()
    {
        return size == capacity;
    }

    public int size()
    {
        return size;
    }

    public void doubleCapacity()
    {
        capacity = capacity * 2;
    }

    public void add(Integer el)
    {
        if(this.isEmpty())
        {
            elements[0] = el;
            size++;
        }

        else if(this.isFull())
        {
            this.doubleCapacity();
            for(int i = 0; i<this.size(); i++)
            {
                if(el >= elements[i])
                {
                    elements[i+2] = elements[i+1];
                    elements[i+1] = el;
                }

                else
                {
                    elements[i+1] = elements[i];
                    elements[i] = el;
                }
            }
            size++;
        }
        else
        {
            for(int i = 0; i<this.size(); i++)
            {
                if(el >= elements[i])
                {
                    elements[i+2] = elements[i+1];
                    elements[i+1] = el;
                }
                else
                {
                    elements[i+1] = elements[i];
                    elements[i] = el;
                }
            }
            size++;
        }

    }

    public String toString()
    {
        String s = "";
        s = s + "<SortedList[";
        for(int i = 0; i < this.size(); i++)
        {
            s = s + elements[i];
            if(i < this.size()-1)
                s = s + ",";
        }
        s = s + "]>";
        return s;
    }


    public static void main(String[] args)
    {
        SortedList sl = new SortedList(5);
        sl.add(3);
        //sl.add(2);
        sl.add(4);
        sl.add(5);
//      sl.add(6);
        System.out.println(sl.toString());
    }



}
公共类分类列表{
私有整数[]元素;
私有整数大小;
私人int能力;
公共分类列表(内部cap){
元素=新整数[cap];
如果(上限>0)
{
cap=容量;
}
其他的
容量=10;
}
公共布尔值为空()
{
返回大小==0;
}
公共布尔值isFull()
{
返回大小==容量;
}
公共整数大小()
{
返回大小;
}
公共交通容量()
{
容量=容量*2;
}
公共空添加(整数el)
{
if(this.isEmpty())
{
元素[0]=el;
大小++;
}
else if(this.isFull())
{
这是doubleCapacity();
对于(int i=0;i=elements[i])
{
元素[i+2]=元素[i+1];
元素[i+1]=el;
}
其他的
{
元素[i+1]=元素[i];
元素[i]=el;
}
}
大小++;
}
其他的
{
对于(int i=0;i=elements[i])
{
元素[i+2]=元素[i+1];
元素[i+1]=el;
}
其他的
{
元素[i+1]=元素[i];
元素[i]=el;
}
}
大小++;
}
}
公共字符串toString()
{
字符串s=“”;
s=s+“”;
返回s;
}
公共静态void main(字符串[]args)
{
分拣列表sl=新分拣列表(5);
sl.add(3);
//sl.add(2);
sl.add(4);
sl.add(5);
//sl.add(6);
System.out.println(sl.toString());
}
}
如果我只在列表中添加2个整数,我的代码就可以工作,但是当我尝试添加数字3,4,5时,我得到3,5,5


有什么问题吗?谢谢..

您的插入代码无效

elements[i+1] = elements[i];
elements[i] = el;

元素[i+1]
的旧值会发生什么变化?

插入代码无效

elements[i+1] = elements[i];
elements[i] = el;

元素[i+1]
的旧值会发生什么变化?

我建议对以前的解决方案进行以下更改。如果您只在toString()中调用sort,那么在一行中有多个未排序的元素的情况下,列表将很快失去顺序(现在您可以从toString()中删除sort()。它本质上是一种快速插入排序,一旦不能在列表中进行任何交换,它就会消失。同样,正如dty所建议的,一个更快的选择是通过二进制搜索找到插入点


公共交通容量(){

公共无效排序(){

//遍历列表,直到其排序。
对于(int i=size()-2;i>=0&&(elements[i]
}

我建议对以前的解决方案进行以下更改。如果您只在toString()中调用sort,那么在一行中有多个未排序的元素的情况下,列表将很快失去顺序(现在您可以从toString()中删除sort())。它本质上是一种快速插入排序,一旦无法在列表中进行任何交换,它就会消失。同样,正如dty所建议的,一种更快的选择是通过二进制搜索找到插入点


公共交通容量(){

公共无效排序(){

//遍历列表,直到其排序。
对于(int i=size()-2;i>=0&&(elements[i]
}

公共类分类列表{

private Integer[] elements;
private int size=0;
private int capacity;

public SortedList(int cap) {

    elements = new Integer[cap];

    if (cap > 0)
    {
        capacity = cap;
    }
    else
        capacity = 10;

}

public boolean isEmpty()
{
    return size == 0;
}

public boolean isFull()
{
    return size == capacity;
}

public int size()
{
    return size;
}

public void doubleCapacity()
{
    capacity = capacity * 2;
}

public void add(Integer el) throws Exception{
    elements[size] = el;
    size++;
    if(size>capacity){
        throw new Exception("Size Exceeded");
    }
}

public String toString()
{
    sort();
    String s = "";
    s = s + "<SortedList[";
    for(int i = 0; i < this.size(); i++)
    {
        s = s + elements[i];
        if(i < this.size()-1)
            s = s + ",";
    }
    s = s + "]>";
    return s;
}

public void sort(){
    for (int i=0; i <size()-1; i++) {
        if (elements[i] > elements[i+1]) {
            // exchange elements
            int temp = elements[i];
            elements[i] = elements[i+1];
            elements[i+1] = temp;
        }
    }
}

public static void main(String[] args)
{
    try {
        SortedList sl = new SortedList(5);
        sl.add(3);
        //sl.add(2);
        sl.add(6);
        sl.add(5);
私有整数[]元素;
私有整数大小=0;
私人int能力;
公共分类列表(内部cap){
元素=新整数[cap];
如果(上限>0)
{
容量=上限;
}
其他的
容量=10;
}
公共布尔值为空()
{
返回大小==0;
}
公共布尔值isFull()
{
返回大小==容量;
}
公共整数大小()
{
返回大小;
}
公共交通容量()
{
容量=容量*2;
}
公共void add(整数el)引发异常{
元素[大小]=el;
大小++;
如果(大小>容量){
抛出新异常(“超出大小”);
}
}
公共字符串toString()
{
排序();
字符串s=“”;
s=s+“”;
返回s;
}
公共无效排序(){
对于(int i=0;i元素[i+1]){
//交换元素
int temp=元素[i];
元素[i]=元素[i+1];
元素[i+1]=温度;
}
}
}
公共静态void main(字符串[]args)
{
试一试{
分拣列表sl=新分拣列表(5);
sl.add(3);
//sl.add(2);
sl.add(6);
sl.add(5);
//sl.add(6); System.out.println(sl.toString()); }捕获(例外情况除外){ Logger.getLogger(SortedList.class.getName()).log(Level.SEVERE,null,ex); } }


}公共类分类列表{

private Integer[] elements;
private int size=0;
private int capacity;

public SortedList(int cap) {

    elements = new Integer[cap];

    if (cap > 0)
    {
        capacity = cap;
    }
    else
        capacity = 10;

}

public boolean isEmpty()
{
    return size == 0;
}

public boolean isFull()
{
    return size == capacity;
}

public int size()
{
    return size;
}

public void doubleCapacity()
{
    capacity = capacity * 2;
}

public void add(Integer el) throws Exception{
    elements[size] = el;
    size++;
    if(size>capacity){
        throw new Exception("Size Exceeded");
    }
}

public String toString()
{
    sort();
    String s = "";
    s = s + "<SortedList[";
    for(int i = 0; i < this.size(); i++)
    {
        s = s + elements[i];
        if(i < this.size()-1)
            s = s + ",";
    }
    s = s + "]>";
    return s;
}

public void sort(){
    for (int i=0; i <size()-1; i++) {
        if (elements[i] > elements[i+1]) {
            // exchange elements
            int temp = elements[i];
            elements[i] = elements[i+1];
            elements[i+1] = temp;
        }
    }
}

public static void main(String[] args)
{
    try {
        SortedList sl = new SortedList(5);
        sl.add(3);
        //sl.add(2);
        sl.add(6);
        sl.add(5);
私有整数[]元素;
私有整数大小=0;
私人int能力;
公共分类列表(内部cap){
元素=新整数[cap];
如果(上限>0)
{
容量=上限;
}
其他的
容量=10;
}
公共布尔值为空()
{
返回大小==0;
}
公共布尔值isFull()
{
返回大小==容量;
}
公共整数大小()
{
返回大小;
}
公共交通容量()
{
容量=容量*2;
}
公共void add(整数el)引发异常{
元素[大小]=el;
大小++;
如果(
private Integer[] elements;
private int size=0;
private int capacity;

public SortedList(int cap) {

    elements = new Integer[cap];

    if (cap > 0)
    {
        capacity = cap;
    }
    else
        capacity = 10;

}

public boolean isEmpty()
{
    return size == 0;
}

public boolean isFull()
{
    return size == capacity;
}

public int size()
{
    return size;
}

public void doubleCapacity()
{
    capacity = capacity * 2;
}

public void add(Integer el) throws Exception{
    elements[size] = el;
    size++;
    if(size>capacity){
        throw new Exception("Size Exceeded");
    }
}

public String toString()
{
    sort();
    String s = "";
    s = s + "<SortedList[";
    for(int i = 0; i < this.size(); i++)
    {
        s = s + elements[i];
        if(i < this.size()-1)
            s = s + ",";
    }
    s = s + "]>";
    return s;
}

public void sort(){
    for (int i=0; i <size()-1; i++) {
        if (elements[i] > elements[i+1]) {
            // exchange elements
            int temp = elements[i];
            elements[i] = elements[i+1];
            elements[i+1] = temp;
        }
    }
}

public static void main(String[] args)
{
    try {
        SortedList sl = new SortedList(5);
        sl.add(3);
        //sl.add(2);
        sl.add(6);
        sl.add(5);