gpt4 book ai didi

java - 知道何时结束冒泡排序中的循环

转载 作者:行者123 更新时间:2023-12-01 14:04:21 24 4
gpt4 key购买 nike

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);
}

}

这是我的问题:

upperBound 变量位于 for 循环外部和 while 循环内部,但为什么我需要这个变量。我不确定我是否理解它对 for 循环的“控制”。当我最初自己写这个时,我没有这个 upperBound 变量,当 i 大于数组的长度时,我的循环就会结束,像这样:

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

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

最佳答案

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

指定upperBound背后的要点这里的变量是运行循环后 k次,最后k数组中的元素是 k最大的元素,按正确的顺序。因此,无需再次在循环中考虑它们(我们已经知道它们位于正确的位置)。每次我们运行循环时,另一个元素最终会出现在正确的位置,因此,我们需要考虑的元素少了(因此循环条件是 i < len - (upperBound+1) ,我们比较的最后一对元素将是就在我们在之前迭代中放置的元素之前)。

关于java - 知道何时结束冒泡排序中的循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19041136/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com