< 返回新闻公共列表
云南大王-数组中的冒泡排序与选择排序
发布时间:2020-04-13 00:00:00
冒泡排序示意图
冒泡排序程序
1 var arr = [4,2,5,7,8,2,1]
2 console.log(arr)
3 // 用冒泡排序从小到大
4 // 总共有arr.length个数,每一趟都能确定一个最大值,但是最后一个不需要比较
5 // 所以总共要比较arr.length-1趟 0 ~ length-2
6 // 5 4 0~3
7 for (var i = 0; i < arr.length - 1; i++) {
8 // 当前第i趟要比较的次数
9 // arr.length i 比较次数
10 // 5 0 4
11 // 5 1 3
12 // 5 2 2
13 // arr.length i arr.length - i - 1
14 for (var j = 0; j < arr.length - i - 1; j++) {
15 // 相邻的两个数来比较 arr[j]和arr[j+1]
16 if (arr[j] > arr[j+1]) {
17 // 交换
18 var temp = arr[j]
19 arr[j] = arr[j+1]
20 arr[j+1] = temp
21 }
22 }
23 }
24 console.log(arr)
选择排序示意图
选择排序程序
1 // 每一趟循环能确定当前的最小值,总的循环趟数arr.length-1
2 for (var i = 0; i < arr.length - 1; i++) {
3 // 先假设当前最小值的索引为i
4 var min = i
5 // 用假设的最小值跟后面的值一一比较
6 // 如果遇到后面的值比假设的最小值还要小,说明假设错误
7 // 最小值的索引应该重新赋值为后面小值的索引
8 // 一趟结束以后就可以得到最小索引,这个时候再交换
9
10 // 内层循环从i+1开始,每一趟都要比较到最后一个,所以到arr.length-1结束
11 for (var j = i + 1; j < arr.length; j++) {
12 // 判断arr[min]是否大于arr[j],如果大于了,说明arr[j]才是最小值
13 // min就应该重新赋值为j
14 if (arr[min] > arr[j]) {
15 min = j
16 }
17 }
18 // 内层循环结束以后,当前这一趟的最小值就被找到了
19 // 让arr[i]和arr[min]交换
20 // 如果i和min相等,那么就没有交换的必要了
21 if (i != min) {
22 var temp = arr[i]
23 arr[i] = arr[min]
24 arr[min] = temp
25 }
26 }