Java 知道何时以冒泡排序结束循环

Java 知道何时以冒泡排序结束循环,java,arrays,sorting,Java,Arrays,Sorting,它不起作用…有人能帮我理解这个上限变量是如何帮助控制循环边界的吗? 我看到它旁边的+1对于第一次运行是必需的,但是它是否与将上限初始化为1而不是0相同?这个想法是,第一次执行for循环时,最大的元素最终位于数组的末尾。第二次,第二大元素在末尾之前的索引处结束,依此类推 这里指定上限变量背后的要点是,在运行循环k次之后,数组中最后的k元素是k最大的元素,顺序正确。因此,没有必要再考虑它们(我们已经知道它们在正确的位置)。每次运行循环时,另一个元素在正确的位置结束,因此,这是我们需要考虑的一个小元素

它不起作用…有人能帮我理解这个上限变量是如何帮助控制循环边界的吗?
我看到它旁边的+1对于第一次运行是必需的,但是它是否与将上限初始化为1而不是0相同?

这个想法是,第一次执行for循环时,最大的元素最终位于数组的末尾。第二次,第二大元素在末尾之前的索引处结束,依此类推


这里指定
上限
变量背后的要点是,在运行循环
k
次之后,数组中最后的
k
元素是
k
最大的元素,顺序正确。因此,没有必要再考虑它们(我们已经知道它们在正确的位置)。每次运行循环时,另一个元素在正确的位置结束,因此,这是我们需要考虑的一个小元素(因此,循环条件是<代码> i<Le-(上界+ 1)< /代码>,我们比较的最后一对元素将是我们在先前迭代中放置的元素之前的元素)。很好的解释。我需要在纸上或头脑中运行for循环,我自己会找到答案,但我认为无论出于什么原因,这都不会有帮助。
public class sortem {

/**
 * @param args
 */
private static void sort(int s[], int len){
    boolean swap = true;
    int upperBound = 0;
    while(swap){
        swap = false;
        for(int i=0;i<len-(upperBound+1);i++)
            if(s[i]> s[i+1]){
                int t=s[i];
                s[i]=s[i+1];
                s[i+1] = t;
                swap = true;

            }
        upperBound++;
    }
}
private static void print(int s[], int len){
    for(int i=0;i<len;i++)
        System.out.println(s[i]);

}
public static void main(String[] args) {
    int  size = 10;
    int s[] = new int [size];

    s[0] = 23; s[1] = 34; s[2] = 56; s[3] = 17; s[4] = 61;
    s[5] = 3;  s[6] = 92; s[7] = 44; s[8] = 19; s[9] = 63;
    sort(s, size);
    print(s, size);
}

}
for(int i = 0; i > len; i++)