JS:冒泡排序 (思路+代码)详解

发布于:2022-12-07 ⋅ 阅读:(591) ⋅ 点赞:(0)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一 .整体思路

            => 相邻两个数之间进行比较  (j,比较次数从第0次开始)

               -> 第零次:1,3,5,4,8,9,7,11  //最后的数最大,已自然排好,不需要排;8数排(比较)7次; 最后一数已排好,-0

               -> 第一次:1,3,4,5,8,7,9,11  //倒数第二ok  前7数排6次; 最后两数已排好,-1(最后两数不比较,比较次数-1)

               -> ...

               ->倒数第二次 (第六次)       //前两数 排一次; 最后六数已排好,-6

               -> 最后:1,3,4,5,7,8,9,11   //最前一数 不用排  全部排好,-7

二、使用步骤

1.第一步

代码如下(示例):

var arr = [3, 1, 5, 8, 4, 11, 9, 7]

            // 第一步            //*循环数组,相邻两数比较大小: 若 前>后,互换

            //* 此为第一次比较; i为数组的索引

            //* i<arr.length-1是因为每个数字都需要比较,此处有8个数,共需比较8(length)次,但最后一值最大,不能再继续向下比较,故-1(length-1); 或者说最后一数最大,无需比较

            for(var i=0;i<arr.length-1;i++){

                console.log(arr[i]);

                if(arr[i]>arr[i+1]){

                    var tmp=arr[i]

                    arr[i]=arr[i+1]

                    arr[i+1]=tmp

                }

            }

2.第二步

代码如下(示例):

//第二步      //* j代表比较的次数; 
			//* j<arr.length-1 本该有多少数排多少次,但(最后一次 仅剩最前的一个数字未排,其余都已排好)===(全都排好); 最后一次不需要排,故-1
			for (var j = 0; j < arr.length - 1; j++) {
				//arr.length-1-j  -j即每次比较,都可以减少 比较次数 的次数; -1即每次最后一个数(最大值)都无需比较(不能再继续向下比较)
				for (var i = 0; i < arr.length - 1 - j; i++) {
					if (arr[i] > arr[i + 1]) {
						var tmp = arr[i]
						arr[i] = arr[i + 1]
						arr[i + 1] = tmp
					}
				}
			}
			console.log(arr)


总结:记忆口诀

双层for循环,每层都-1;内层接外层,两两相交换

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到