js通过冒泡排序对数组进行排序
冒泡排序就是通过对数组元素两两进行对比,左边大于右边的时候进行位置对调,依次对比执行下去,一轮执行完成后最后一位元素即为最大值,然后开始除最后一位元素外的第二轮排序,第二轮排序将得到倒数第二位为本轮最大元素,依次执行,直到完成排序
上代码:
let arr = [ 19, 21, 15, 20, 17, 39, 2];
function bubble(arr) {
for(let i=0; i<arr.length-1; i++) {
for(let j=0; j<arr.length-1-i; j++){
let temp;
if(arr[j]>arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr
}
bubble(arr); // [2, 15, 17, 19, 20, 21, 39]
但是以上方式会存在问题,比如说数组非常庞大,但是经过几轮就排好序了,后续根本不需要在进行冒泡排序了,但上述排序轮数没进行完会一直排下去,显然非常浪费资源。所以可以改进一下,增加一个节流阀,代码如下
let arr = [ 15, 2, 17, 19, 20, 21, 39];
function bubble(arr) {
for(let i=0; i<arr.length-1; i++) {
let isend = true; // 判断是否完成排序, 初始设置为true
for(let j=0; j<arr.length-1-i; j++){
let temp;
if(arr[j]>arr[j+1]) {
isend = false; // 如果还在排序就置false
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
if(isend)
break;
}
return arr
}