javascript数组选择排序和冒泡排序详解

本文详细介绍了JavaScript中的两种基本排序算法:冒泡排序和选择排序。冒泡排序通过相邻元素比较交换实现排序,而选择排序则通过找到最小元素并交换到正确位置完成排序。这两种算法都是对无序数组进行处理以达到排序的目的。
摘要由CSDN通过智能技术生成

数组的遍历

数组的索引是按照0~n的顺序排序,所以可以通过通过for循环来实现数组的遍历,这个行为就叫做数组的遍历

var arr = [1,2,3,4,5,6]
for(var i = 0;i<arr.length;i++){ //arr.length是获取数组的长度
	document.write(arr[ i ]);
}

输出结果为 :1 2 3 4 5 6

数组的排序

数组的排序就是将一个无须的数组,通过处理,变成一个有序的数组
主要介绍2种排序的方法:冒泡排序和选择排序

冒泡排序
原理:

  • 通过循环遍历数组,让相邻的两个值进行比较,如果前一个比后一个大,那么就把两个换个位置

  • 数组遍历一遍以后,那么最后一个数字就是最大的那个了

  • 然后进行第二遍的遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二的位置

  • 以此类推,最后就会按照顺序把数组排好了

var arr=[3,1,2,8,5,4,9,0]
for(var j=0;j<arr.length-1;j++){
//arr.length-1的原因:假设这个数组长度为6;后面的5个数已经比价排放好了,
//那么最前面的一个数就没有必要再进行比较了
      for(var i = 0 ; i<arr.length-1-j; i++){
      //arr.length-1的原因跟上面的是一个道理的;
      //-j是因为外部循环执行了j次之后,内部的遍历就应当减少j次;
      //也就是一个长度为5的数组,外部循环执行第二次的时候,也就是j==1时;
      //数组所需要比较的长度为4
          if(arr[i]>arr[i+1]){
              var tmp = arr[i];
              arr[i] = arr[i+1];
              arr[i+1] = tmp;
          }
      }
    }
    alert(arr)
    //输出的结果为0,1,2,3,4,5,8,9

选择排序
它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完

var arr=[3,1,2,8,5,4,9,0]
for(var j = 0;j<arr.length-1;j++){
             var min = j
         for(var i =j+1;i<arr.length-1;i++){
             if(arr[i]<arr[min]){
                 min = i 
             }
         }
             var tmp = arr[min];
             arr[min] = arr[j];
             arr[j] = tmp
         }
      alert(arr)
         //输出的结果为0,1,2,3,4,5,8,9

原理:

  • 先假定数组中的第 0 个就是最小的数字的索引

  • 即 var min = 0 ;arr[mim];

  • 然后遍历数组,只要有一个数字比我小,那么就替换之前记录的索引

  • for(var i = 0; i < arr.length ;i++){
    if(arr[i]<arr[min]){
    min = i // i为这个数组最小值得索引 也就可以得出 arr[min] 在此次遍历中,为最小值
    }
    }

  • 知道数组遍历结束后,就能找到最小的那个索引,然后让最小的索引换到第 0 个的位置
    -1通过上一步,得出arr[min]为最小值
    -2声明变量来存储arr[min] , var tmp = arr[min];
    -3 把arr[0]赋值给arr[min] ,即 arr[min] = arr[0];此时在min索引上的值为 arr[0]
    -4把tmp的值赋值给 arr[0]; 即arr[0] = tmp;此时的arr[0]所存储的值即为最小值

  • 通过外部嵌套循环来进行多次的遍历;
    for(var j = 0;j<arr.length-1;j++){

    • 再来第 j 趟遍历,假定第 1 个是最小的数字的索引
    • var min = j
      }
  • 在遍历一次数组,找到比我小的那个数字的索引

  • 遍历结束后换个位置

  • 依次类推,也可以把数组排序好

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值