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