冒泡排序
逻辑:极值冒泡,迭代;通过设置正序标识变量,优化排序计算
function bubbleSort(arrlist) {
var count = arrlist.length - 1;// 最大外循环次数
console.log('最大排序次数:' + count);
for (var i = 0;i < count; i++) {
var index = count;// 下标
var flag = true;// 正序状态标识
for(var j = 0; j < index; j++) {
if(arrlist[j + 1] < arrlist[j]) {
flag = false;
var temp;
temp = arrlist[j];
arrlist[j] = arrlist[j + 1];
arrlist[j + 1] = temp;
}
}
console.log('第' + (i+1) + '次排序:' + arrlist);// 打印本次排序结果
if(flag){
return arrlist;
}
index --;
}
return arrlist;
}
var arrlist = [];
for(var i=0; i<9; i++){
arrlist.push(Math.floor(Math.random()*100));
}
console.log('初始排序:' + arrlist);// 打印初始排序
var sortedArr = bubbleSort(arrlist);
console.log('最终排序:' + sortedArr);
测试:
跑3次脚本.png快速排序
逻辑:找基准,三分法,使用了递归
var quickSort = function(arraylist) {
if (arraylist.length <= 1) { return arraylist; }
// 基准元素的下标
var pointIndex = Math.floor(arraylist.length / 2);
// 基准元素
var point = arraylist.splice(pointIndex, 1)[0];
var left = [];
var right = [];
// 剩余元素分筛
for (var i = 0; i < arraylist.length; i++){
if (arraylist[i] < point) {
left.push(arraylist[i]);
} else {
right.push(arraylist[i]);
}
}
// 返回递归计算结果
return quickSort(left).concat([point], quickSort(right));
};
网友评论