javaScript:一分钟看懂数组排序以及冒泡排序(重点)

目录

一.前言

二.数组排序

sort()

    字符串大小的比较原则

    字符编码排序规则

如果使用sort从小到大排列  (重点)

    函数的返回值

    规则:

代码 

案例 

数组打乱

sort相关代码 

三.冒泡排序(重点)

执行过程

代码演示(详细步骤/过程拆解)

案例

练习随机生成 [10,80]的10个整数然后进行冒泡排序


一.前言

        数组排序是将数组中的元素按照一定的规则进行重新排列的过程。排序的目的通常是为了使数组的元素按照升序或降序的方式排列,以便更方便地进行搜索、比较和查找操作。

       冒泡排序是最简单且常见的排序算法之一,它通过重复遍历数组并比较相邻元素的大小来进行排序。在每次遍历中,如果前面的元素大于后面的元素,则交换它们的位置,直到整个数组排序完成。

二.数组排序

sort()

    使用 sort()方法,对数组进行排序(该方法改变的是原数组)

    sort 默认 把 number类型转化为string 类型,然后根据每个字符串的字符编码比较大小。

    字符串大小的比较原则

    几个字符串比较大小,会依次比较每一位置上的字符编码大小,直到比较出大小之后就不再比较,后面的字符直接省略

    字符编码排序规则

    数字 0-9

    A-Z,a-z 依次变大

    A<a

如果使用sort从小到大排列  (重点)

     一般的在进行排序的时候,会给sort()传入一个参数,该参数是一个函数,在函数中设置排序规则,

    该函数必须有返回值

    函数的返回值

    return 参数1 - 参数2: 从小到大排序

    return 参数2 - 参数1: 从大到小排序

    规则:

    当返回一个正数,就会交换两者的位置

    当返回一个负数,不会交换两者的位置

    当返回一个0,会认为这两个数字相等,也不会交换位置

代码 

 let arr4 = [112,231,21,21,1,3,32]
   arr4.sort(function(a,b){
       return a-b  //从小到大
   })
   console.log(arr4)

 

案例 

数组打乱

//数组打乱
   let arr5 = ["1","2","3","4","5","6",
   "7","8","9","10","11","12","13","14"]
   arr5.sort(function(){
      return Math.random()-0.5
   })
   console.log(arr5);

sort相关代码 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>数组排序</title>
</head>
<body>
    
</body>
</html>
<script>
    /*
    使用 sort()方法,对数组进行排序
    该方法改变的是原数组
    sort 默认 把 number类型转化为string 类型,然后根据每个字符串的字符编码比较大小。

    字符串大小的比较原则
    几个字符串比较大小,会依次比较每一位置上的字符编码大小,直到比较出大小之后就不再比较
    后面的字符直接省略

    字符编码排序规则
    数字 0-9
    A-Z,a-z 依次变大 
    A<a

    */
    let arr1 = [1,4,6,3,2,10]
    arr1.sort();
    console.log(arr1);

    let arr2 = ['e','ab','ac','d']
    arr2.sort();
    console.log(arr2);

    let arr3 = ['刘备','关羽','曹操','张飞']
    arr3.sort();
    console.log(arr3);

    /*
    一般的在进行排序的时候,会给sort()传入一个参数,该参数是一个函数,在函数中设置排序规则,
    该函数必须有返回值

    函数的返回值
    return 参数1 - 参数2: 从小到大排序
    return 参数2 - 参数1: 从大到小排序

    规则:
    当返回一个正数,就会交换两者的位置
    当返回一个负数,不会交换两者的位置
    当返回一个0,会认为这两个数字相等,也不会交换位置
    */
   let arr4 = [112,231,21,21,1,3,32]
   arr4.sort(function(a,b){
       return a-b  //从小到大
   })
   console.log(arr4)

   //数组打乱
   let arr5 = ["1","2","3","4","5","6",
   "7","8","9","10","11","12","13","14"]
   arr5.sort(function(){
      return Math.random()-0.5
   })
   console.log(arr5);
</script>

三.冒泡排序(重点)

执行过程

  1. 从数组的第一个元素开始,依次比较相邻的两个元素。
  2. 如果前面的元素比后面的元素大(或小,取决于排序顺序),则交换这两个元素的位置。
  3. 继续向后遍历数组,重复1和2步骤,直到遍历到倒数第二个元素。
  4. 重复以上步骤的过程,每次遍历都使得最大(或最小)的元素“浮”到上一轮排序中最后一个未排序的位置。
  5. 重复上述步骤,直到全部元素排序完成。

代码演示(详细步骤/过程拆解)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>冒泡排序</title>
</head>
<body>
    
</body>
</html>
<script>
    let arr = [3,5,4,2,1]
    //第一趟,比较4次
    for (let i = 0; i < 4; i++) {
        //比较两个相邻的大小,如果i位置的值 大于 i+1位置是值,则交换数据
        if(arr[i]>arr[i+1]){
            let temp = arr[i]
            arr[i] = arr[i+1]
            arr[i+1] = temp
        }
        
    }
    console.log(arr);  //[3, 4, 2, 1, 5]

    //第二趟比较三次
    for (let i = 0; i < 3; i++) {
        if(arr[i]>arr[i+1]){
            let temp = arr[i]
            arr[i] = arr[i+1]
            arr[i+1] = temp
        }
    }
    console.log(arr); //[3, 2, 1, 4, 5]

    //第三趟比较两次
    for (let i = 0; i < 2; i++) {
        if(arr[i]>arr[i+1]){
            let temp = arr[i]
            arr[i] = arr[i+1]
            arr[i+1] = temp
        }
    }
    console.log(arr);  //[2, 1, 3, 4, 5]
    //第四趟  ,比较一次
    for (let i = 0; i < 2; i++) {
        if(arr[i]>arr[i+1]){
            let temp = arr[i]
            arr[i] = arr[i+1]
            arr[i+1] = temp
        }
    }
    console.log(arr); //1, 2, 3, 4, 5]

    /*
    比较的数组,每一次比较的趟数,他和对应比较的次数关系是
    一共比较的趟数 arr.lenght-1

    每一轮比较的的次数,是arr.lenght  - 当前的趟数(轮数)
    */

    //外层控制比较的轮数
   for (let i = 1; i < arr.length; i++) {
       //内层控制比较的次数
       for (let j = 0; j < arr.length-i; j++) {
        if(arr[j]>arr[j+1]){    //(s[j]<s[j+1]) 从大到小
            let temp = arr[j]
            arr[j] = arr[j+1]
            arr[j+1] = temp
        }
        
       }
    
   }


  
    </script>

案例

练习随机生成 [10,80]的10个整数然后进行冒泡排序

//练习随机生成 [10,80]的10个整数然后进行冒泡排序

   let s = []
   for (let i = 0; i < 10; i++) {
    let sj = Math.floor(Math.random()*71+10)
    s[i] = sj
   }
   console.log(s)
   for (let i = 1; i < s.length; i++) {
       //内层控制比较的次数
       for (let j = 0; j < s.length-i; j++) {
        if(s[j]>s[j+1]){    //(s[j]<s[j+1]) 从大到小
            let temp = s[j]
           s[j] =s[j+1]
            s[j+1] = temp
        } 
       }  
   }
   console.log(s);
   console.log('最小值是'+s[0]);
   console.log('最大值是'+s[s.length-1]);

 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小姚学前端

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值