冒泡排序基本思想
1、每次将相邻两个数比较,如果第一个大于第二个数,则交换这两个数,否则不变。
2、如果有n个数,则要进行n-1趟比较。
3、在第一趟比较中要进行n-1次两两比较,则第一趟下来最后一个数是最大的,不用参与接下来的比较,于是在第二趟比较中要进行n-2次比较,…,在第j趟比较中要进行n-j次两两比较。
该排序算法的时间复杂度为O(n2)。
从小到大排序
示例:将数组中元素从小到大输出
var a = [10, 7, 5, 27, 98, 31]; // 定义一个数组
console.log("排序前:", a); // 输出排序前的数组
// 冒泡排序
for (var i = 0; i < a.length; i++) { // 外循环,控制比较的轮次(趟数)
for (var j = 0; j < a.length - i - 1; j++) { // 内循环:进行数据的比较,小数向前移动、大数向后移动
if (a[j] > a[j + 1]) { // 如果前一个数大于后一个数,交换两个数,让小的数在前面
var temp = a[j];//交换数据
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
console.log("排序后:", a); // 输出排序后的数组
结果为:
从大到小排序
如果想让数据从大到小输出,只需要更改if语句中的条件为:a[j] < a[j + 1],代码如下:
var a = [10, 7, 5, 27, 98, 31]; // 定义一个数组
console.log("排序前:", a); // 输出排序前的数组
//冒泡排序
for (var i = 0; i < a.length; i++) { //外循环,控制比较的轮次(趟数)
for (var j = 0; j < a.length - i - 1; j++) { //内循环:进行数据的比较,小数向前移动、大数向后移动
if (a[j] < a[j + 1]) { // 如果前一个数小于后一个数,交换两个数,让大的数在前
var temp = a[j]; //交换数据
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
console.log("排序后:", a); // 输出排序后的数组