目錄
一.前言
二.數組排序
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]);
?