排序:就是把一个乱序的数组,通过我们的处理,让他变成一个有序的数组
冒泡排序
==>先遍历数组,让挨着的两个进行比较,如果前一个比后一个大,那么就把两个数据换个位置
==>数组遍历一遍以后,那么最后一个数字就是最大的那个了
==>然后进行第二遍遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二个位置了
==>以此类推,最后就会按照顺序把数组排好了
1 先准备一个乱序的数组
var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8];
2 先不急着循环,先来看数组里面内容换个位置,例如换:arr[0]和arr[1]
var temp = arr[1];
arr[1] = arr[0];
arr[0] = temp;
// 3 第一次遍历数组,把最大的放到最后面去
for(var i=0;i //每次都是当前一个和后一个比,所以最后一个比较就是: //arr[arr.length-2]和arr[arr.length-1]比 //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置 if(arr[i]>arr[i+1]){ var temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] =temp; } } //第一次结束以后,数组中的最后一个,就会是最大的那个数字 //4 然后我们把上面的代码执行多次,数据有多少项就执行多少次 for (var j = 0; j < arr.length; j++) { for (var i = 0; i < arr.length - 1; i++) { //每次都是当前一个和后一个比,所以最后一个比较就是: //arr[arr.length-2]和arr[arr.length-1]比 //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置 if (arr[i] > arr[i + 1]) { var temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } /* 给一些优化 1 想象一个问题,假设数组长度是9,第八次排完以后,后面8个数字已经按照顺序排好了,剩下的那个最小的,一定是在最前面,那么第九次就已经没有意义了,因为最小的已经在前面了,不会再有任何换位置出现了 2 第一次的时候,已经把最大的数字放在最后面了, 那么第二次的时候,其实倒数第二个和倒数最后一个就不用比了, 因为我们就是要把倒数第二大的放在倒数第二的位置,即使比较了, 也不会换位置。第三次就要倒数第三个数字就不用再和后两个比较了。 以此类推,那么其实每次遍历的时候,就遍历当前次数-1 至此,冒泡排序就完成了 */ // 优化1以后的结果 for(var j=0;j for(var i=0;i //每次都是当前一个和后一个比,所以最后一个比较就是: //arr[arr.length-2]和arr[arr.length-1]比 //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置 if(arr[i]>arr[i+1]){ var temp = arr[i]; arr[i] = arr[i+1]; arr[i+1] =temp; } } } // 优化2以后的结构 for (var j = 0; j < arr.length - 1; j++) { for (var i = 0; i < arr.length - 1 - j; i++) { //每次都是当前一个和后一个比,所以最后一个比较就是: //arr[arr.length-2]和arr[arr.length-1]比 //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置 if (arr[i] > arr[i + 1]) { var temp = arr[i]; arr[i] = arr[i + 1]; arr[i + 1] = temp; } } } var flag = 0; // 统计一共要进行多少次外层for循环 var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8]; for (var j = 0; j < arr.length - 1; j++) { var count = 0; // 统计arr[i] < arr[i+1] 的次数 for (var i = 0; i < arr.length - 1 - j; i++) { if (arr[i] > arr[i + 1]) { var temp = arr[i + 1]; arr[i + 1] = arr[i]; arr[i] = temp; } else { count++; // 每当arr[i] < arr[i+1] 的时候,次数+1 } } if (count == arr.length - 1 - j) { break; // 当arr[i] < arr[i+1] 的次数 等于 所有比较次数的时候,此时排序已经完全正确,可直接结束 } count = 0; // 每次外层for循环结束都要重置次数 flag++; // 每进行一次外层for循环,便记录1次(放在外层for循环的末尾时,则不会加上最后一次外层for循环检测到完全正确时的情况) } console.log(arr); console.log(flag); // 优化3 可能出现还没完全比较完便已经正确