冒泡排序
它通过比较相邻的两个数,如果后一个数比前一个数小,则交换它们的位置。重复这个过程,直到所有的数都按照从小到大的顺序排列。
代码中使用了两层嵌套的循环。外层循环控制比较的轮数,内层循环用于比较相邻的两个数并交换位置。
下面代码添加了一个标志位来判断是否发生了交换,如果某一轮比较中没有发生交换,说明数组已经有序,可以提前结束循环。
var arr = [3, 1, 4, 6, 5, 7, 2];
function bubbleSort(arr) {
var len = arr.length;
for (var i = 0; i < len - 1; i++) {
var swapped = false; // 标志位,判断是否发生交换
for (var j = 0; j < len - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
swapped = true; // 发生了交换
}
}
if (!swapped) {
break; // 没有发生交换,提前结束循环
}
}
return arr;
}
console.log(bubbleSort(arr));
我们在内层循环中添加了一个标志位 swapped
,初始值为 false
。如果发生了交换,将 swapped
设置为 true
。在每一轮外层循环结束后,检查 swapped
的值,如果为 false
,说明数组已经有序,提前结束循环。
这样可以避免在已经排序完成的数组上进行不必要的比较,提高了冒泡排序的效率。
运行结果应为 [1, 2, 3, 4, 5, 6, 7]
。
THE END
暂无评论内容