js 数组冒泡排序

冒泡排序原理:

升序:

比较相邻元素,如果第一个比第二个大,就交换它们两个

对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数.

针对所有的元素重复以上的步骤,除了最后一个.

持续每次对原来越少的元素重复上面的步骤,

直到没有任何一对数字需要比较.

 

 

1 //数组arr
2 arr = [12,10,15,8,4]

对上面的数组进行排序

分析: 

第一次比较: 

arr[0]= 12 大于10,向右移动  结果: 10 12 15 8 4

arr[1]= 12 小于15,停止比较  结果: 10 12 15 8 4

arr[2]= 15 大于8,向右移动  结果: 10 12 8 15 4

arr[3]= 15 大于4,向右移动  结果: 10 12 8 4 15

 

第二次比较:

arr[0]= 10  小于12,  停止比较    结果: 10 12 8 4 15

arr[1]= 12   大于8,    向右移动    结果: 10 8 12 4 15

arr[2]= 12   大于4,    向右移动    结果: 10 8 4 12 15

arr[3]= 12   小于15,   停止比较   结果: 10 8 4 12 15

 

第三次比较: 

arr[0]= 10 大于8,     向右移动   结果: 8 10 4 12 15

arr[1]= 10 大于4,      向右移动   结果: 8 4 10 12 15

arr[2]= 10 小于12,    停止比较    结果: 8 4 10 12 15

arr[3]= 12 小于15,     停止比较    结果: 8 4 10 12 15

 

第四次比较: 

arr[0]= 8 大于4, 向右移动    结果: 4 8 10 12 15

arr[1]= 8  小于10,停止比较    结果: 4 8 10 12 15

arr[2]= 10  小于12,停止比较    结果: 4 8 10 12 15

arr[3]= 12  小于15,停止比较    结果: 4 8 10 12 15

 1  //冒泡排序写法
 2 var arr = [12, 10, 15, 8, 4]
 3 for(var i = 4; i > 0; i--) {
 4      for (var j = 0; j < 4; j++) {
 5           if(arr[j] > arr[j + 1]){
 6             var temp = arr[j]
 7             arr[j] = arr[j + 1]
 8             arr[j + 1] = temp
 9    }
10  }
11 }

优化上面的代码:

第一次比较结果将最大值放到数组最后

第二次比较结果将第二最大值放到数组倒数第二位

第三次比较结果将第三最大值放到数组倒数第三位

第四次比较将结果第四最大值放到数组倒数第四位

至此比较结束

我们看到上面的比较结果:

第一次比较四次得到最大值

第二次比较三次得到第二最大值

第三次比较两次得到第三最大值

第四次比较一次得到第四最大值

 

代码优化: 

 1 //优化冒泡排序写法
 2 
 3 var arr = [12, 10, 15, 8, 4]
 4 
 5 function arrSort(arr) {
 6 for(var i = 0; i < arr.length; i++) {
 7      for (var j = 0; j < arr.length -i -1; j++) {
 8           if(arr[j] > arr[j + 1]){
 9             var temp = arr[j]
10             arr[j] = arr[j + 1]
11             arr[j + 1] = temp
12    }
13  }
14 }
15 return arr
16 }
17 console.log(arrSort(arr))

 

posted @ 2020-06-01 14:17  看我几分像从前  阅读(382)  评论(0)    收藏  举报