黑马程序员技术交流社区
标题:
为什么我写这么冒泡排序,内存会炸掉
[打印本页]
作者:
lizequn007wo
时间:
2015-7-26 21:36
标题:
为什么我写这么冒泡排序,内存会炸掉
求解啊,以下是程序
import java.util.Arrays;
public class lun {
public static void main(String[] args) {
int[] arr = {5,6,9,44,2};
for(int i=1;i<arr.length;i++){
int tmp =0;
for(int j=1;i<arr.length-i;j++){
if(arr[i]>arr[i+1]){
tmp = arr[i];
arr[i+1]=arr[i];
arr[i]=tmp;
}
}
}
//
System.out.println(Arrays.toString(arr));
}
}
作者:
孙晓磊
时间:
2015-7-26 21:52
package pack;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] arr = {5,6,9,44,2};
for(int i=0;i<arr.length;i++){
int tmp =0;
for(int j=0;j<arr.length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
tmp = arr[j+1];
arr[j+1]=arr[j];
arr[j]=tmp;
}
}
}
//
System.out.println(Arrays.toString(arr));
}
}
作者:
悲伤丿心
时间:
2015-7-26 21:56
数组下标是从0开始的,所以你a[0]就没有执行到
作者:
孙晓磊
时间:
2015-7-26 22:06
package pack;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] arr = {5,6,9,44,2};
int tmp;
for(int i=0;i<arr.length-1;i++){
for(int j=0;j<arr.length-i-1;j++)
{
if(arr[j]>arr[j+1])
{
tmp = arr[j+1];
arr[j+1]=arr[j];
arr[j]=tmp;
}
}
}
//
System.out.println(Arrays.toString(arr));
}
}
复制代码
标准的代码如上,你应该选择<>这个按钮加入代码1、排序的换位,
tmp=y;
y=x;
x=tmp;
记不住就认准第一行的y到第二行的y,第二行的x到第二行的x是个斜线/
2、你的tmp是一个被赋值的量,所以它初始化与否没有关系,更没必要一遍遍的在第一个for循环里重复初始化,所以放在数组那边,只用定义就好
3、你内存溢出的问题,5,6,9,44,2,这是五个数字,数组的长度是5,其中的元素下标依次为0,1,2,3,4,
你的arr[x]给在最后会变成arr[4]=arr[5];但是问题是原数组最后个的就是arr[4]=2;arr[5]不存在,自然内存崩了
4、排序的外循环一般用于计算次数,内循环才是每一次的交换的值,arr[x]来作为交换的值,思考的方式就欠妥
作者:
孙晓磊
时间:
2015-7-26 22:09
tmp.jpg
(10.1 KB, 下载次数: 6)
下载附件
2015-7-26 22:08 上传
1、排序的换位记不住就记得如图的两个/
作者:
神兽
时间:
2015-7-26 22:31
数组越界了,你的外循环和内循环数组长度都应该减一。冒泡的规则是两两比较,你dabug调试一下会更深刻
作者:
小城青年
时间:
2015-7-26 23:01
数组越界了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2