java - 我无法理解冒泡排序中的 while 循环条件
问题描述
首先,我确实了解for
循环的作用和if
块的作用
我不明白的部分是!isSorted
,如果最初将 isSorted 设置为false
,是否!isSorted
意味着它将 while 循环设置为true
?
如果是,那么在发生交换并且 isSorted 标记为 之后,循环如何再次进行false
?
抱歉,如果我不能清楚地表达自己
它有效,但为什么有效?
public class BubbleSorting {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int[] massiv = {2,14,8,90,97,44,23,78, 11,1,46, 55, 105,64};
int buffer;
boolean isSorted = false;
while(!isSorted){
isSorted = true;
for(int i = 0; i<massiv.length-1; i++){
if(massiv[i]>massiv[i+1]){
buffer = massiv[i];
massiv[i] = massiv[i+1];
massiv[i+1] = buffer;
isSorted = false;
}
}
}
System.out.println(Arrays.toString(massiv));
}
}
解决方案
FirstisSorted
设置为false
So表示变量的值及其!isSorted
的否定。所以它会进入while循环。isSorted
true
然后在里面首先设置为true
。如果发生交换,它将设置为false
. 所以直到交换发生isSorted
是错误的。那意思!isSorted
是真的。因此,直到交换发生,while 循环才会继续。
当交换没有发生时。isSorted
会是真的,!isSorted
也会是假的。然后它存在while循环
推荐阅读
- sql - 三个表的 SQL 棘手的左连接 - 所有不同的键
- vue.js - VueJs - 使用 Slot 名称调用另一个组件中的组件
- android - 如何使用 kotlin 删除 view-pager 2 中的项目?
- python - 使用 Figure() 对象更新 FigureCanvasQTAgg 画布
- nginx - Nginx try_files 与别名一起工作
- php - 在 PHP 中用点转换时间戳(“yyyy.mm.dd hh:nn:ss.zzz”)
- python - git pull on running 代码会导致损坏
- google-cloud-platform - 当自动缩放策略设置为目标 HTTP 负载平衡利用率时,MIG 如何自动缩放?
- python - Flask-Admin:按不同字段对列进行排序
- java - PostgresSQL jsonb 列 - “。”的问题