java冒泡排序问题

时间:2014-02-21 08:16:16

标签: java sorting

过去一个月我正在学习Java。我很难理解这一行

 for(int i = 0;i<list.length-1;i++){

任何人都可以用外行来解释我。我是一个慢学习者。我理解循环,但这件事我无法理解

Int[]list = {5͵7͵54͵34͵87͵44};

boolean swap = true;
int temp;
while(swap){
   swap = false;
   for(int i = 0;i<list.length-1;i++){
        if(list[i] > list[i+1]){
            temp = list[i];
            list[i] = list[i+1];
            list[i+1] = temp;                   
            swap = true;
        }
    }
}

5 个答案:

答案 0 :(得分:3)

我们考虑一个数组

 0 1 2 3 4 5 6 7 8 9   <-- array indexes
 _ _ _ _ _ _ _ _ _ _
| | | | | | | | | | |

for(int i = 0;i<list.length-1;i++){行告诉您要从0迭代到lenght - 2。在我的示例中,长度为10,因此您将从0迭代到8

这样做的原因是为了避免OutOfBoundsException这一行list[i] > list[i+1]中的i,其中i+1 - 索引与i = 8 - 索引。在最后一次迭代中,它将是i + 1 = 9和{{1}}(这是我的数组的最后一个索引)。

答案 1 :(得分:1)

您的代码将遍历此for循环中的所有list.entries。

如果位置i的list.entry大于位置i + 1的list.entry 你将list.entry保存在临时的位置i 然后你将在位置i的实际列表中的第i + 1位保存更大的list.entry。 你的列表[i + 1]获得较小的temp值(你在开头保存) 之后你设置swap = true ...可能是为了知道你换了i和i + 1

如果swap不成立,则while循环完成,因为您的列表已排序

答案 2 :(得分:0)

第5行的循环用于比较所有可能的数字对。 while循环用于选择第一个成员,而for循环用于选择第二个成员。

答案 3 :(得分:0)

你有一个大小为6的数组,即索引0-5。 for循环以索引0开始,并使用索引1检查索引0处的元素。如果索引0大于索引1,则交换这两个值。类似地,它检查直到索引4(i = 4)并且达到索引5(i + 1),因为这将是数组索引的结束,即你将检查数组中的最后两个元素(因为数组索引)从0开始。如果你超越i = 4,你将检查5和6(你的数组中不存在,并将抛出OutOfBoundsException)。

答案 4 :(得分:0)

for(int i = 0;i<list.length-1;i++){

浏览列表中的项目。您正在使用list [i]访问每个项目。 (第一项有索引0(列表[0])。 i 在循环开始时将为零(0),然后每次迭代将增加一(i ++) ;它会增加到中间表达

i<list.length-1`) 

拟合 i

因此,在您的情况下,它将通过项目(您可以看到列表中有6个)。最后一项有索引5列表[5]。这就是为什么你在list.length-1

中有-1