用冒泡排序从小到大排列好一组数;
首先跟选择排序一样我们要了解冒泡排序的思路:
选择排序是拿一个数依次和后面的每个数比,每一轮得出一个最大的数;
而冒泡排序则是相邻的两个数进行比较,如果前面的数大于后面的数,则两个数交换位置;
//规律,n个数,比較n-1 轮, 每轮比較的次数逐渐降低
// var arr = [65, 97, 76, 13, 27, 49, 58];var temp;
//1 外层循环:控制比較的轮数
function sort(){
for (var i = 0; i < arr.length - 1; i++) {//2 内层循环:控制每一轮比較的次数,次数递减
for (var j = 0; j < arr.length - i - 1; j++) {
//3 判断当前项和后项的大小,如果当前项大于后项,交换两个位置的值
if (arr[j] > arr[j + 1]) {
//4 交换
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
console.log(arr);
到这一步就基本排序完了,但是此时代码还可以再优化一下;
functtion sort1(){
var arr = [1, 2, 3, 5, 4];
var temp;
//1 外层循环:控制比較的轮数
for (var i = 0; i < arr.length - 1; i++) {
//----假设当前这一轮可以排序完毕(假设状态)可以跳出
var flag = true;
//2 内层循环:控制每一轮比較的次数,次数递减
for (var j = 0; j < arr.length - i - 1; j++) {
//3 判断当前项和后项的大小,如果当前项大于后项,交换两个位置的值
if (arr[j] > arr[j + 1]) {
//4 交换
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
//----更改假设状态,进入了if,说明没有排序完毕,设置flag为false
flag = false;
}
}
//每一轮执行的时候,都有可能已经排序完毕了
//我们需要在每一轮比較结束后,去检查当前排序的状态,如果已经排序完毕,跳出
//是否排序完毕,我们可以通过观察if是否被进入来确定
//结束前,进行验证,如果到结束位置,flag值为true,说明排序完毕
if (flag) {
break;
}
}
return arr;
}
console.log(arr);