目录
一.前言
二.数组排序
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-9A-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步骤,直到遍历到倒数第二个元素。
- 重复以上步骤的过程,每次遍历都使得最大(或最小)的元素“浮”到上一轮排序中最后一个未排序的位置。
- 重复上述步骤,直到全部元素排序完成。
代码演示(详细步骤/过程拆解)
<!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]);