我想弄清楚,我只需要指出正确的方向。请不要只写解决方案,我想了解我需要做些什么来使它工作。
static void bubbleSort() {
int [] a = {1,3,4,2,5};
int [] b = new int[a.length];
int j = 0;
for(int c = 0;c <= a.length;c++){//this loop doesnt even do anything???
for(int i = 0;i<a.length-j;i++){
if(a[i]>a[i+1]){
b[i] = a[i+1];
b[i+1] = a[i];
j++;
}
else{
b[i] = a[i];
b[i+1] = a[i+1];
j++;
}
}
}
for(int i = 0; i< b.length ; i++)
System.out.println(b[i]);
}
答案 0 :(得分:1)
您的代码存在许多问题 -
1)你不需要额外的数组'b',冒泡排序可以在现场完成。
2)考虑使用'j',将其替换为'c',并检查它是如何在循环中产生差异的。
3)您的新排序数组将出现在'b'中,并且仍在检查条件的每一步 -
if(a[i]>a[i+1])
你不觉得,'b'在这里扮演角色吗?
如果您仍有问题,请考虑以上几点并对此帖发表评论。
答案 1 :(得分:-1)
不完全确定,但我认为这应该是更正的实施
static void bubbleSort() {
int [] a = {1,3,4,2,5};
for(int c = 0;c < a.length;c++){//now it does
for(int i = 0;i+1<a.length-c;i++){
if(a[i]>a[i+1]){
int tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
for(int i = 0; i< a.length ; i++)
System.out.println(a[i]);
}
你一次又一次地跑过来,但你改变了b,你没有比较。所以你的第一个for循环无所事事。你不需要j,c的作品。因为如果你在内循环中进行了1个循环,那么最大的数字就在最后,所以你不必再检查它。 c循环应该运行到c