我们说冒泡排序。(特意做了一个封面海报,擦了,可以的话给俺点个关注吧)
冒泡排序∶是一种算法,把一系列的数据按照一定的顺序进行排列显示(从小到大或从大到小)。
要点:两两比较,逐步交换。
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
如下面:1是经过俩两交换逐步浮上来的。这只是一趟。交换了4次
5 5 5 5 1
4 4 4 1 5
3 -------> 3 -------> 1 -------> 4 ------->4
2 1 3 3 3
1 2 2 2 2
我们再执行一次,这里我们看到2上升的次数相较1变少了,又是一趟,这次交换了3次
1 1 1 1 1
5 5 5 2 2
4 -------> 4 -------> 2 -------> 5 ------->5
3 2 4 4 4
2 3 3 3 3
又是一趟,这次交换了2次
1 1 1 1 1
2 2 2 2 2
5 -------> 5 -------> 3 -------> 3 ------->3
4 3 5 5 5
3 4 4 4 4
又是一趟,这次交换了1次
1 1 1 1 1
2 2 2 2 2
3 -------> 3 -------> 3 -------> 3 ------->3
5 4 4 4 4
4 5 5 5 5
看起来某点冒泡的意思了
规律:
1.一共需要的趟数我们用外层for循环
5个数据我们一共需要走4趟
长度就是数组长度诚去arr.length - 1
2.每一趟交换次数我们用里层for循环
第一趟交换4次
第二趟交换3次第三趟交换2次第四趟交换1次
长度就是数组长度减去次数
但是我们次数是从0次开始的所以最终arr.length - i-1
3.每次交换两个变量
由此我们写代码:
<!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>jxl</title>
</head>
<body>
<div style="border-radius: 5px;"></div>
<script>
var arr=[12,1,6,78,5,61,7,7,9,54];
for(var i=0;i<arr.length;i++){ //需要的趟数
for(var j=0;j<arr.length-i;j++) //交换的次数 关于判定
//两两交换值
if(arr[j]>arr[j+1]){
var t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
console.log(arr);
</script>
</body>
</html>
关于判定条件(需要灵活使用)
for(var i=0;i<arr.length;i++){ //可替换的写法i<=arr.length-1
for(var j=0;j<arr.length-i;j++) //可替换的写法j<=arr.length-i-1 你甚至可直接j<=arr.length
题外话,前两天看到一个有个很2逼的排序。叫猴子排序。听着就有点不正经,有一个经典的无限猴子理论:所谓的无限猴子定理就是让猴子在打印机前面永无止尽的敲打键盘,最终能够依靠随机打字动作打出一步完整的《哈姆雷特》剧本(是不是很2逼?)。
也就是说今天对于任意一个数组,我们胡球地重新组合成新的一个数组在执行无数次之后,一定会产生一个含有一定规律,满足你(从小到大、从大到小啊)各种奇怪的诉求。
简言之,猴子排序 = 随即排序,只要我试错成本大,就能达到目的。了解一下就行,图一乐就行。当然了有机会写个这样的屎看看