算法原理:
冒泡排序算法的运作如下:(升序)
1.比较相邻的元素。如果前一个比后一个个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。第一轮排序后,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个(因为最后一个经过第一轮比较已经是最大的了)。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
.
例子:对 数组[10,49,30,20,50,70,2] 进行排序。
未排序时:49 10 30 20 50 70 2
第一趟比较结果(将最大数放后):
第一次:10 49 30 20 50 70 2 49与10比较,49>10,故两者交换位置
第二次:10 30 49 20 50 70 2 49与30比较,49>30,故两者交换位置
第三次:10 30 20 49 50 70 2 49与20比较,49>20,故两者交换位置
第四次:10 30 20 49 50 70 2 49与50比较,49<50,故两者不交换位置
第五次:10 30 20 49 50 70 2 50与70比较,50<70,故两者不交换位置
第六次:10 30 20 49 50 2 70 70与2 比较,2 <70,故两者不交换位置
第二趟比较结果:
第一次:10 30 20 49 50 2 70
第二次:10 20 30 49 50 2 70
第三次:10 20 30 49 50 2 70
第四次:10 20 30 49 50 2 70
第五次:10 20 30 49 2 50 70
第三趟比较结果:
第一次:10 20 30 49 2 50 70
第二次:10 20 30 49 2 50 70
第三次:10 20 30 49 2 50 70
第四次:10 20 30 2 49 50 70
第四趟比较结果:
第一次:10 20 30 2 49 50 70
第二次:10 20 30 2 49 50 70
第三次:10 20 2 30 49 50 70
第五趟比较结果:
第一次:10 20 2 30 49 50 70
第二次:10 2 20 30 49 50 70
第六趟比较结果:
第一次:2 10 20 30 49 50 70
经过上述过程,可看出,经过6趟的交换,且每次比较的次数逐渐减少。
实现代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>冒泡排序</title> </head> <body> <script> var arr=[10,49,30,20,50,70,2]; function bubbleSort(arr) { for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } console.log(bubbleSort(arr)); </script> </body> </html>