首页 > 编程语言 > 详细

数组的两种排序方:冒泡排序和选择排序

时间:2020-05-04 10:43:28      阅读:61      评论:0      收藏:0      [点我收藏+]

虽然数组排序有sort方法,但是如果数组中是对象的话,sort方法就不适用啦,所有我们就手写一个排序方法。再者,我们不是为了排序而学习,而是为了接触算法而学习,为了锻炼逻辑思路而学习。

一:冒泡排序:两两比较,第一个大于第二个就交换

附上自己画的图片技术分享图片希望小伙伴们更能理解冒泡排序技术分享图片

以上图片,比较的轮数就是外部循环,每轮比较的次数时内循环,话不多说,附上代码:

 1 // 1:冒泡排序两两比较,第一个大于第二个叫交换
 2 
 3   function Arr(arr) {
 4 
 5 ?    // 外循环控制比较的轮数,比较次数是数组的长度减1
 6 
 7 ?    for (var i = 0; i < arr.length - 1; i++) {
 8 
 9 ?      // 内循环控制每轮的比较的次数,比较次数是数组长度减1再减i
10 
11 ?      for (var j = 0; j < arr.length - 1 - i; j++) {
12 
13 ?        if (arr[j] > arr[j + 1]) {
14 
15 ?          // 定义一个临时变量,用来交换使用
16 
17 ?          var ls = arr[j]
18 
19 ?          arr[j] = arr[j + 1]
20 
21 ?          arr[j + 1] = ls
22 
23 ?        }
24 
25 ?      }
26 
27 ?    }
28 
29 ?    return arr;
30 
31   }
32 
33 var arr=[9,5,1,7,2,3,4,6]
34 console.log(Arr(arr))

这个就是冒泡排序啦,当然,理解思路不止这一种哈!

二:选择排序:取出一个,依次和其他比较,找到最小值,之后再交换。交换次数要比冒泡排序少很多,所以,性能更高。

附上我画思路图,希望小伙伴能理解!技术分享图片

以下结构是:比较次数和哪些索引在比较

0-1,0-2,0-3,0-4

1-2,1-3,1-4

2-3,2-4

3-4

 1  var arr = [9,8,5,6,7];
 2     console.log(arr);
 3     for(var i=0;i<arr.length-1;i++){
 4         // 为了能不断的使用第一位和后面的作比较,在能拿到第一个数据的时候,存到一个ls变量中
 5         // 将来使用这个ls变量作比较,就不影响真正的第一位的数据了
 6         // 因为每一行第一个索引都在变,所以,要将这个ls变量,放在第一个循环的内部
 7         var ls = arr[i];
 8         // ls保存了数组中某个数据,lsIndex保存这个数据的索引
 9         var lsIndex = i;
10         for(var j=i+1;j<arr.length;j++){
11             if(ls > arr[j]){
12                 // ls里面的数据如果大了,换成小的
13                 // 因为在找最小的
14                 ls = arr[j];
15                 // 如果ls里面的数据换了,lsIndex也跟着换
16                 lsIndex = j;
17             }
18         }
19         // ls必然已经是最小的了
20         // 交换数组中的数据    
21         // 先把真正的第一位拿走,否则会被覆盖
22         // 放到真正的最小值的位置
23         arr[lsIndex] = arr[i];
24         // 再把ls变量中,最小的值,放在第一位
25         arr[i] = ls;
26     }
27     // 按照从左到右的顺序,依次取出每个数据,后后面所有数据做比较,找到最小值,交换
28     // 选择排序
29     console.log(arr);

 

 

数组的两种排序方:冒泡排序和选择排序

原文:https://www.cnblogs.com/Mings-blog/p/12825035.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!