數組中的冒泡排序與選擇排序

冒泡排序示意圖spa

冒泡排序程序code

 1     var arr = [4,2,5,7,8,2,1]
 2     console.log(arr)
 3     // 用冒泡排序從小到大
 4     // 總共有arr.length個數,每一趟都能肯定一個最大值,可是最後一個不須要比較
 5     // 因此總共要比較arr.length-1趟  0 ~ length-2
 6     // 5  4 0~3
 7     for (var i = 0; i < arr.length - 1; i++) {
 8       // 當前第i趟要比較的次數
 9       // arr.length   i    比較次數
10       //    5         0       4
11       //    5         1       3
12       //    5         2       2
13       // arr.length   i    arr.length - i - 1
14       for (var j = 0; j < arr.length - i - 1; j++) {
15         // 相鄰的兩個數來比較 arr[j]和arr[j+1]
16         if (arr[j] > arr[j+1]) {
17           // 交換
18           var temp = arr[j]
19           arr[j] = arr[j+1]
20           arr[j+1] = temp
21         }
22       }
23     }
24     console.log(arr)

選擇排序示意圖blog

選擇排序程序排序

 1     // 每一趟循環能肯定當前的最小值,總的循環趟數arr.length-1
 2     for (var i = 0; i < arr.length - 1; i++) {
 3       // 先假設當前最小值的索引爲i
 4       var min = i
 5       // 用假設的最小值跟後面的值一一比較
 6       // 若是遇到後面的值比假設的最小值還要小,說明假設錯誤
 7       // 最小值的索引應該從新賦值爲後面小值的索引
 8       // 一趟結束之後就能夠獲得最小索引,這個時候再交換
 9 
10       // 內層循環從i+1開始,每一趟都要比較到最後一個,因此到arr.length-1結束
11       for (var j = i + 1; j < arr.length; j++) {
12         // 判斷arr[min]是否大於arr[j],若是大於了,說明arr[j]纔是最小值
13         // min就應該從新賦值爲j
14         if (arr[min] > arr[j]) {
15           min = j
16         }
17       }
18       // 內層循環結束之後,當前這一趟的最小值就被找到了
19       // 讓arr[i]和arr[min]交換
20       // 若是i和min相等,那麼就沒有交換的必要了
21       if (i != min) {
22         var temp = arr[i]
23         arr[i] = arr[min]
24         arr[min] = temp
25       }
26     }
相關文章
相關標籤/搜索