首页 > 解决方案 > 按升序对列表进行排序,出现系统越界错误

问题描述

当列表的长度为 3 时,我的代码按升序对列表进行排序,代码运行良好,但是,当列表的长度增加并且插入的变量数量增加时,输出要么是要么System out of bound不正确排序.

    public class Lists {
        
    int [] lists;
    int itemcount;
    
    public Lists(int l) {
        lists =new int[l];
        itemcount=0;
    }
    public void insert(int x) {
        if(itemcount==0) {
            lists[itemcount]=x;
            itemcount++;
        }
        else {
            for(int i=itemcount-1;i>=0;i--) {
                if(lists[i]>x) {
                    lists[i+1]=lists[i];
                    lists[i]=x;
                    itemcount++;
                }
                else {
                    lists[i+1]=x;
                    itemcount++;
                    
                }
            }
        }
    }
    public static void main(String[]args) {
        Lists s=new Lists(5);
        s.insert(9);
        s.insert(4);
        s.insert(6);
        s.insert(5);
        s.insert(8);
    
        
        for (int i=0;i<s.lists.length;i++) {
            System.out.print(s.lists[i]);
        }
        
        
    }
    
    }

标签: javasorting

解决方案


这是插入排序,每次我们将一个项目插入到已经排序的列表中。所有大于该项目的元素都向前移动。所以我们需要停在正确的位置,所以它需要在迭代循环中附加条件。看看它是如何工作的,https://en.wikipedia.org/wiki/File:Insertion-sort-example-300px.gif

public void insert(int x) {
  int i;/*Insertion position */
  for(i=itemcount-1;i>=0 && lists[i]>x;i--) {
    lists[i+1]=lists[i];
  }
  lists[i+1]=x;
  itemcount++;    
 }

推荐阅读