当我们学到JS数组的时候,我们是否会想到用JS来实现冒泡排序呢? 那么今天它来了:
首先,简单理解一下什么是冒泡排序(今天先简单理解一下升序):
就好比图片上的,本来是数组中是按照5,4,3,2,1来进行存放的的,我们这里要实现1,2,3,4,5升序排序,那么我们就要将数组中的元素进行比较
比较的解析: 第一步:第一个元素和第二个进行比较,若第一个元素比第二个元素大,则二者互换位置 第二步:互换位置后,原先的第二个元素位置中现在存放的是第一个元素,然后现在在原先第二个元素位置的第一个元素跟第三个元素进行比较...就这样一直跟最后一个元素比较大小后,最开始的第一个元素的比较历程才结束 (注意:若第一个元素在比较过程中,没有比进行比较的另一方元素大的时候,就会保留在比较步骤前一步的位置,然后跳转到下一个第一步中互换位置后的占于第一个位置的元素开始比较) 依此类推:直到完成排序后实现第一个元素<第二个元素...<第n个元素即可(今天拿五个元素实验)
代码思路: 第一步,在第一个元素进行比较的时候,我们发现,它在进行比较的时候最多可以实现四次交换,第二次交换(在第一次交换中位于第一个元素位的元素)的时候,最多可以交换三次......依此类推,是不是有n个元素的话,第n-1个元素和交换次数的和就是n? 第一步:先定义数组以及进行交换的中间变量:
var arr=[5,4,3,2,1]; var temp=0;
第二步:利用外层for循环实现交换趟数
for (var i=0;i<=arr.length-1;i++){}(这里为什么是arr.length-1,第一次元素交换的时候最多跑4次,第二次最多跑三次...)
第三步:使用内存for循环实现交换次数以及交换变量
for(var j=0;j<=arr.length-i-1;j++){ if(arr[j]>arr[j+1]){ var temp= arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } }
整体实现:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<script>
var arr=[5,4,3,2,1];
var temp=0;
for (var i=0;i<=arr.length-1;i++){
//外层循环管趟数
for(var j=0;j<=arr.length-i-1;j++){
//里层的循环管交换次数
//内部交换两个变量的值
if(arr[j]>arr[j+1]){
var temp= arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
console.log(arr);
</script>
</head>
<body>
</body>
</html>
结果: