冒泡排序

1、比较相邻的两个元素,如果前一个比后一个大,则交换位置。
2、比较完第一轮的时候,最后一个元素是最大的元素。
3、这时候最后一个元素是最大的,所以最后一个元素就不需要参与比较大小。
以[23,9,78,6,45]为例,用冒泡排序法从小到大排列:
冒泡排序_第1张图片
冒泡排序_第2张图片
冒泡排序_第3张图片
冒泡排序_第4张图片

 function bubbleSort(){
			    var arr = [23,9,78,6,45];//1,4 
			    //var arr = [69,54,95,47,88,17,42,93,85,67];
			    console.log("排序前:"+arr);  
			    //1.遍历数组,次数就是arr.length - 1
//				for (var i = 0; i < arr.length - 1; i++) {
//				    // 如果前一个数 大于 后一个数 就交换两数位置
//				    if (arr[i] > arr[i + 1]) {
//				        var temp = arr[i];
//				        arr[i] = arr[i + 1];
//				        arr[i + 1] = temp;
//				    }
//				}//9,23,6,45,78
				//我们能找到数组中最大的数,放到最后,这样重复 arr.length - 1 次,便可以实现数组按从小到大的顺序排好了。
			
			    //2.遍历数组,次数就是arr.length - 1
//				for (var j = 0; j < arr.length - 1; j++) {
//				    // 这里 i < arr.length - 1 ,要思考思考合适吗?我们下面继续说
//				    for (var i = 0; i < arr.length - 1; i++) {
//				        if (arr[i] > arr[i + 1]) {
//				            var temp = arr[i];
//				            arr[i] = arr[i + 1];
//				            arr[i + 1] = temp;
//				        }
//				    }
//				}
				//3.我们想一下,当第一次,找到最大数,放到最后,那么下一次,遍历的时候,是不是就不能把最后一个数算上了呢?因为他就是最大的了,不会出现,前一个数比后一个数大,要交换位置的情况,所以内层 for 循环的次数,改成 i < arr.length - 1 -j ,才合适,看下面的代码。
				for (var j = 0; j < arr.length - 1; j++) {
			    // 这里要根据外层for循环的 j,逐渐减少内层 for循环的次数
			    for (var i = 0; i < arr.length - 1 - j; i++) {
			      if (arr[i] > arr[i + 1]) {
			        var temp = arr[i];
			        arr[i] = arr[i + 1];
			        arr[i + 1] = temp;
			      }
			    }
			  }
				//我们想下这个情况,当原数组是,
//				arr = [1,2,4,3];
//				在经过第一轮冒泡排序之后,数组就变成了
//				arr = [1,2,3,4];
				//此时,数组已经排序完成了,但是按上面的代码来看,数组还会继续排序,所以我们加一个标志位,如果某次循环完后,没有任何两数进行交换,就将标志位 设置为 true,表示排序完成,这样我们就可以减少不必要的排序,提高性能。
		    	var max = arr.length - 1;
				  for (var j = 0; j < max; j++) {
				    // 声明一个变量,作为标志位
				    var done = true;
				    for (var i = 0; i < max - j; i++) {
				      if (arr[i] > arr[i + 1]) {
				        var temp = arr[i];
				        arr[i] = arr[i + 1];
				        arr[i + 1] = temp;
				        done = false;
				      }
				    }
				    if (done) {
				      break;
				    }
				  }
		    	console.log("排序后:"+arr)
		}
		bubbleSort();

你可能感兴趣的:(冒泡排序)