1.冒泡排序,性能已优化
function bubbleSort(ary) { var len = ary.length, flag = null; if (len > 1) { for (var i = 0; i < len - 1; i++) { flag = false;//位置变更标识符,可以优化性能 for (var j = 0; j < len - 1 - i; j++) { //console.log(i); if (ary[j] > ary[j + 1]) { var temp = ary[j]; ary[j] = ary[j + 1]; ary[j + 1] = temp; flag = true;//有位置交换则改变flag的值 } } if (!flag) {//检测到上一轮已经没有过位置变更,就说明排序已经完成 break; } } } return ary; } var ary1 = [111, 99, 12, 32, 78, 88, 34]; console.log(bubbleSort(ary1));
2.插入排序
function insertSort(ary) { var len = ary.length; if (len > 1) { for (var i = 1; i < len; i++) { if (ary[i] < ary[i - 1]) { //当前项小于前一项的时候才向前插入 var cur = ary[i], j = i - 1; //保存第i项的值,找到前一项的索引 while (j >= 0 && cur < ary[j]) { //前一项存在且第i项的值小于前一项 ary[j + 1] = ary[j]; //当前比较项赋值为前一项的值 j--; //继续向前查找 } ary[j + 1] = cur; //将第i项插入到当前位置 } } } return ary; } var ary2 = [111, 99, 12, 32, 78, 88, 34]; console.log(insertSort(ary2));
3.快速排序
function quickSort(ary) { if (ary.length <= 1) { return ary; } var midIndex = Math.floor(ary.length / 2); var minItem = ary.splice(midIndex, 1)[0]; var leftAry = [], rightAry = []; for (var i = 0; i < ary.length; i++) { var cur = ary[i]; cur < minItem ? leftAry.push(cur) : rightAry.push(cur); } return quickSort(leftAry).concat(minItem, quickSort(rightAry)); } var ary3 = [111, 99, 12, 32, 78, 88, 34]; console.log(quickSort(ary3));
欢迎分享本文,转载请保留出处:前端ABC » JavaScript冒泡、插入、快速排序