JS 冒泡排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let arr = [49, 38, 65, 97, 76, 13, 27, 49];
console.log('arr:' + arr); //打印排序前的数组
bubbleSort(arr);
console.log('sortArr:' + arr); //打印排序后的数组

function (arr) {
for (i = 0; i < arr.length - 1; i++) { //排序趟数 注意是小于
for (j = 0; j < arr.length - i - 1; j++) {
//一趟确认一个数,数组长度减当前趟数就是剩下未确认的数需要比较的次数
//因为j从0开始,所以还要再减1,或者理解为arr.length-(i+1)
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
console.log('newArr:' + arr);
}
}

加入flag,没有进行过交换,则不再进行多余地排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
let arr = [49, 38, 65, 97, 76, 13, 27, 49];
console.log('arr:' + arr);
bubbleSort(arr);
console.log('sortArr:' + arr);

function bubbleSort(arr) {
let flag = 1; //flag用来标记某一趟排序是否发生交换
for (i = 0; i < arr.length - 1; i++) {
flag = 0; //flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序
for (j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = 1; //flag置为1,表示本趟排序发生了交换
}
}
console.log('newArr:' + arr);
if (flag == 0) break;
}
}

作者

DullSword

发布于

2018-07-19

更新于

2024-07-02

许可协议

评论