作為一個程序員,一些基本的排序算法是必須要掌握的。以前人們總覺得算法是后端程序員去學的,前端只需要專注于網頁的美觀以及 JS 的基本邏輯交互就行,然而,近幾年隨著前端行業的發展,前端越來越注重邏輯交互,如果你還像很久之前那樣只知道用 HTML + CSS 去構建網頁,那就落伍了。如今,前端程序員也需要對算法有一定的了解,不說別的,多掌握點東西總是好的。今天的文章介紹的是排序算法中的選擇排序。
什么是排序
維基百科中這樣說明:一種能將一串數據依照特定排序方式進行排列的一種算法。生活中也有很多排序的例子:超市購物排隊,學生成績排序,班級座位排序等。排序可以分為內部排序還有外部排序。內部排序是指待排序列完全存放在內存中所進行的排序過程,適合不太大的元素序列;外部排序能夠處理極大量數據的排序算法,通常需要結合外存儲器(硬盤)使用。
什么是選擇排序
我的理解是選擇排序在于 “選擇” ,即先找到待排序數組中最小(也可以是最大)的數,然后把它排到數組的最前面,接著繼續找最小(最大)的數,然后依次排在前面排好的數后面。舉個例子可能方便理解一點,在讀小學的時候,剛開學老師要排座位,老師的考慮是讓高個子的同學坐后面,矮個子的坐前一點,這樣看黑板就不會被擋了,于是老師把同學們排成一排,一眼望去,找到最矮的小明,叫他站到前面去,接著又在剩下的人中找到最矮的小方,讓他排在小明后邊,重復這樣找下去,直到所有的同學都按照從矮到高的順序排列好,就可以分配座位了。選擇排序的過程大致如此。
實現代碼
以下是選擇排序的代碼:
function selectionSort(arr) {
var len = arr.length;
var minIndex, temp;
console.time('選擇排序耗時');
for (var i = 0; i < len - 1; i++) {
minIndex = i;
for (var j = i + 1; j < len; j++) {
if (arr[j] < arr[minIndex]) { //尋找最小的數
minIndex = j; //將最小數的索引保存
}
}
temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
console.timeEnd('選擇排序耗時');
return arr;
}
var arr = [3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(selectionSort(arr));
// 選擇排序耗時: 0.327880859375ms
// 2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50
代碼中使用了一個臨時變量 temp 來交換兩個數,用 minIndex 來表示找到的最小的數的索引,當后面一個數比這個最小的數還要小時,那么將這個數的小標賦給 minIndex ,然后將它跟前面的數交換位置,這樣的話,每次循環,我們就會找到最小的一個數,然后將它與當前遍歷到的數互換,等遍歷完的時候,基本上就排好啦。
時間和空間復雜度
最好的情況:T(n) = O(n2)
最壞的情況:T(n) = O(n2)
平均時間復雜度是:T(n) = O(n2)
空間復雜度為:O(1)
引用
維基百科: https://zh.wikipedia.org/wiki/
代碼出處: https://blog.csdn.net/jizhen_tan/article/details/52555639