流程思路
Java写法
public class Bubbing {
public static void main(String[] args) {
int[] data = new int[]{5,4,3,2,1};
int temp = 0;
//几次循环,n个数字有n-1次循环
for (int i = 0; i < data.length - 1; i++) {
//将第一个数字与其后面的数字两两比较,进行排序。
/*j < data.length - 1 - i 即该数字所需要比较的次数。因为冒泡排序从最小排到最大,
排到第i(数组含义,含0)个的时候,就意味着后面有i个已经排好顺序了。因此不需要再继续比较。*/
for (int j = 0; j < data.length - 1 - i; j++) {
if (data[j] > data[j + 1]) {
temp = data[j];
data[j] = data[j + 1];
data[j + 1] = temp;
}
}
}
for (int k = 0; k < data.length; k++) {
System.out.println(data[k]);
}
}
}
Java写法验证结果
JavaScript写法
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>The bubbling</title>
</head>
<body>
<script type="text/javascript">
function bubble(arr){
var temp = 0;
//几次循环,n个数字有n-1次循环
for(var i = 0;i<arr.length-1;i++){
console.log(arr);
//将第一个数字与其后面的数字两两比较,进行排序。
/*j < data.length - 1 - i 即该数字所需要比较的次数。因为冒泡排序从最小排到最大,
排到第i(数组含义,含0)个的时候,就意味着后面有i个已经排好顺序了。因此不需要再继续比较。*/
for(var j = 0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
console.log(bubble([5,4,3,2,1]));
</script>
</body>
</html>
JavaScript验证结果
第一层大循环详解
第二层循环详解
小结
冒泡排序一般是通过两层循环进行处理,第一层循环主要为了让冒泡排序成功,数组需要进行多少次大循环,这里我们确定了在一个大于等于两个数字的数组时(因为只存在一个数字的数组不需要排序),确定一个数字的排序就需要一个大循环,即n个数字有n-1次大循环;第二层循环主要是将数组的第一个数字与其后面的数字进行比较,然后确定排序。
综上所述,在第二层循环完成的时候,第一层大循环也完成了一次,因此该数组就已经确定好了一个数字的排序,在所有循环完成后,冒泡排序(数字从小到大)就完成了。