插入排序哪里错了

一个做运维的girl 2016-07-07 09:12:30
/*
* {39,80,76,41,13,29,50}
* 插入排序的思想:每次将一个带排序的记录,按照关键字大小插入到前面已经排好的子序列的适当的位置,直到全部记录插入完为止
*/
public static void insertSort(int[] arr) {

int out, in;
int temp;
for (out = 1; out < arr.length; out++) {
if(arr[out]<arr[out-1]){
temp=arr[out];
in=out-1;

for(in=out-1;arr[in]>temp&&in>=0;in--){
arr[in+1]=arr[in];
}
arr[in+1]=temp;
}

}

for(int i=0;i<arr.length;i++)
System.out.print(arr[i]+" ");
}
...全文
81 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
我知道我哪里错了 首先看下面代码: public void insertSort(int[] arr) { int i,j; int temp; for(i=1;i<arr.length;i++){ if(arr[i]<arr[i-1]){ temp=arr[i]; for(j=i-1;temp<arr[j]&&j>=0;j--){ arr[j+1]=arr[j]; } arr[j+1]=temp; } } } 结果为:数组越界 主要是;temp<arr[j]&&j>=0判断条件顺序位置,原因是&&具有短路的特点,当j=-1时,temp<arr[-1]数组越界,不再进行j>=0的判断
qq_15915835 2016-07-07
  • 打赏
  • 举报
回复

for (out = 1; out < arr.length; out++) {
			if (arr[out] < arr[out - 1]) {
				temp = arr[out];
				for (in = out; in >= 1 && arr[in - 1] > temp; in--) {
					arr[in] = arr[in - 1];
				}
				arr[in] = temp;
			}

		}

这次是经测试版本
qq_15915835 2016-07-07
  • 打赏
  • 举报
回复

for(in=out-1;arr[in]>temp&&in>=0;in--){
arr[in+1]=arr[in];
}
arr[in+1]=temp;
}
我没测试哈。我用眼睛看觉得这里应该为

[code=java]
for(in=out-1;arr[in]>temp&&in>=0;in--){
arr[in+1]=arr[in];
}
arr[in]=temp;
}
楼主你试试

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧