氣泡排序
氣泡排序的思想:
- 臨近的兩個元素互相比價,每輪迴圈找出剩餘元素中最大或最小值,將其放於陣列的最後和最前,迴圈的長度減一。
- 剩餘的元素再重複第一步,直至迴圈的長度等於1,停止迴圈,排序完成。
function bubbleSort(arr){
var i = arr.length,temp, j;
while(i!==1){
for(j=0;j<i-1;j++){
if(arr[j] > arr[j+1]){
temp = arr[j]
arr[j] = arr[j+1]
arr[j+1] = temp
}
}
i--
}
return arr
}
複製程式碼
選擇排序
- 兩層for迴圈,內層每次預設最值為外層for迴圈的變數為下標。內層for迴圈每次找出最小或最大值的下標。
- 經過內層迴圈的一次遍歷,將得出的最值與預設的最值位置進行對比,不相等說明預設的最值不是最值,於是交換其值。這樣每次就能從剩的值中找出最值並排序。
function selectSort(arr){
for(let j=0;j<arr.length-1;j++){
min = j;
for(let i= j+1;i<arr.length;i++){
if(arr[min] > arr[i]){
min = i;
}
}
if(min !== j){
let temp;
temp = arr[min]
arr[min] = arr[j]
arr[j] = temp
}
}
return arr
}
複製程式碼
計數排序
- 找出陣列中最大值,宣告一個臨時陣列。
- 依靠一個for迴圈向臨時陣列中儲存傳入的陣列中的資料,下標代表其值,陣列中該下標對應的數值為該數字的個數。
- 另一個for迴圈中迴圈條件小於等於最大值。只要臨時陣列中的值大於0就向目標陣列中儲存,目標陣列下標值每次自增1,臨時陣列的值就減一。 for迴圈完畢即可完成排序。
function countingSort(arr){
var max = Math.max(..arr);
var temp = [];
var num = 0;
for(let i=0; i<arr.length; i++){
if(!temp[arr[i]]){
temp[arr[i]] = 1;
}else{
temp[arr[i]]++;
}
}
for(i=0; i<max; i++){
while(temp[i] > 0){
arr[num++] = i;
temp[i]--;
}
}
return arr
}
複製程式碼