function bubblesort(arr)
if(arr.length == 0 || arr.length == 1)
for(let outer = arr.length; outer >= 2; outer--)}}
return arr;
}
選擇排序我們也需要用到巢狀迴圈,演算法思路如下:
從陣列的第乙個元素開始,將第乙個元素逐個與其他元素比較,檢查完所有元素後,最小的元素會放到最前面。然後從第二個元素繼續,重複這一過程,直到進行到陣列倒數第二個元素,排序並完成了。
外迴圈從陣列的第乙個元素移動到倒數第二個元素; 內迴圈從第二個陣列元素移動到最後乙個元素, 查詢比當前外迴圈所指向的元素小的元素。 每次內迴圈迭代後, 陣列中最小的值都會被賦值到合適的位置。
function selectionsort(arr)
if(arr.length == 0 || arr.length == 1)
let min;
for(let outer = 0; outer <= arr.length - 2; outer++)
}let temp = arr[outer];
arr[outer] = arr[min];
arr[min] = temp;
}return arr;
}
插入排序有兩個迴圈。 外迴圈將陣列元素挨個移動, 而內迴圈則對外迴圈中選中的元素及它後面的那個元素進行比較。 如果外迴圈中選中的元素比內迴圈中選中的元素小, 那麼陣列元素會向右移動, 為內迴圈中的這個元素騰出位置。
function insertionsort(arr)
if(arr.length == 0 || arr.length == 1)
let temp,inner;
for(let outer = 0; outer < arr.length; outer++)
arr[inner] = temp;
}return arr;
}
首先我們實現乙個生成隨機數組的函式:
function createarr(n)
if(n === 0)
for(let i = 0; i < n ; i++)
return arr;
}
我們通過獲取當前的時間戳和執行演算法後時間戳進行對比來比較,主要比較陣列的大小為100, 1000, 10000時來觀察三種演算法。
//陣列為100的情況
let arr = createarr(100);
let start = date.now();
bubblesort(arr);
let stop = date.now();
cosnole.log(`氣泡排序用時$`);
start = date.now();
selectionsort(arr);
stop = date.now();
cosnole.log(`選擇排序用時$`);
start = date.now();
insertionsort(arr);
stop = date.now();
cosnole.log(`插入排序用時$`);
最後得出的結果為
說明陣列大小為100時,三種排序演算法速度之間沒有什麼太大的差別。
我把陣列擴大為1000得到的結果如下:
現在我們可以看到選擇排序和插入排序比氣泡排序都快了很多。
接著我把資料增大為10000,得到的結果為:
現在我們可以很明顯的看出三種排序演算法的速度誰快誰慢了,特別是我們處理比較大的資料時,對演算法的選擇影響到程式的效能。
三種基本排序演算法
示例陣列 以公升序為例 for int i 0 i arr.length i 輪數 第一次 j下標從0開始,第0位與第1位相比較,當第0位大於第1位時 3 1 進行交換。交換完陣列為 第二次j為1,第1位與第2位比較,3 5,不交換。第三次j為2,第2位與第3位比較,5 2,交換。陣列為 第四次j為...
JS洗牌演算法的三種實現
function washcard1 cards return cards function washcard2 cards cards cardstmp return cards function washcard3 cards return cards var cards newarray 54...
三種基本排序
由於排序不僅是針對主關鍵字,那麼對於次關鍵字,因為待排序的記錄序列中可能存在兩個或者兩個以上的關鍵字相等的記錄,排序結果可能會存在不唯一的情況,所以我們給出了穩定與不穩定排序的定義。假設ki kj 1 i n,1 j n,i j 且在排序前的序列中 ri 領先於 rj 即i j 如果在排序後仍然領先...