java - 按升序对列表进行排序,出现系统越界错误
问题描述
当列表的长度为 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]);
}
}
}
解决方案
这是插入排序,每次我们将一个项目插入到已经排序的列表中。所有大于该项目的元素都向前移动。所以我们需要停在正确的位置,所以它需要在迭代循环中附加条件。看看它是如何工作的,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++;
}
推荐阅读
- python - Tensorflow keras model.save 使用自定义层引发 InaccessibleTensorError
- docker - 从 docker 容器提交时,Spark 作业未安排给工作人员
- csvhelper - 使用 CsvHelper 将不同的列标题名称映射到 C# 实体类中的单个字段
- reactjs - react dropzone,限制上传的图片数量,超过限制时给出错误消息
- amazon-web-services - 如何监控和调试 AWS 中对 s3 的每个请求?
- actions-on-google - 已部署但未调用 Google 操作
- java - 通过 LAN 建立 Java 网络
- react-native - 如何将json字符串从react-native中的fetch转换为对象
- python-3.x - 我可以使用 Tornado 将 json-rpc 解析为 Web 前端吗?
- javascript - fullCalendar v5 eventOverlap 资源