代码如下:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
/*冒泡排序*/
//获取随机不重复数组
function randomArray()
{
//获取一个随机数组
let arr = [];
let newArr =[];
for (let i = 0;i<9;i++){
arr[i]=(Math.floor(Math.random()*9)+1);
if (newArr.indexOf(arr[i])==-1){
newArr.push(arr[i]);
}
else {
i--;
}
}
console.log(newArr);
return newArr;
}
let Arr = randomArray();
//对数组进行冒泡排序
//先遍历整个数组 获取到每一个元素
for (let i = 0;i<Arr.length-1;i++){
//从索引第一个开始,与相邻的元素进行比较,若前一个比后一个大,则交换位置。
for(let j = 0 ;j<Arr.length-1-i;j++){
if (Arr[j]>Arr[j+1]){
let temp = Arr[j];
Arr[j] = Arr[j+1]
Arr[j+1] = temp;
}
}
}
console.log(Arr);
</script>
</head>
<body>
</body>
</html>
要点:
-
获取整个数组元素时,由于我们是要用前一个与后一个比较,当获取到Arr.length-1索引元素时,j+1已经是最后一个元素,仅需要一次比较即可,因此不需要获取到整个数组长度,若获取到了整个长度,会导致当i等于数组长度时,j+1的值会造成数组越界,值变为undefined。
-
同理,当外层循环已经排到前两个数时,说明除第一个数以外,后面的数字顺序都排好,他们的位置关系已经确定,不需要再次比较,循环条件也为Arr.length-1。
-
当每比较一次时,最后一个数的位置就以确定,因此,内层循环Arr.length-1-i 。