演算法之旅 選擇排序法

2021-08-08 15:41:20 字數 2152 閱讀 8163

html5學堂-碼匠:資料快速的計算與排序,與前端頁面效能有直接的關係。由於排序的演算法有很多,在本次「演算法系列」的分享當中,我們先從簡單易上手的選擇排序法開始,其它的排序演算法會隨後陸續跟大家一起分享。

為解決乙個問題而採取的方法和步驟,稱為演算法。

我們可以把演算法看成一本「福字剪紙教程」,其中每一種演算法就是剪紙教程中的一種包含「固定步驟」的剪紙方法,使用者只要按照步驟進行剪紙,就可以剪出好看的福字。

之所以有這麼多的演算法,在於不同演算法解決問題的效率各有不同,適合不同的場景。隨著問題規模的增長,演算法之間的差距會變的不可跨越。提公升解決問題的效率,不僅僅依賴於選擇快速的硬體,還依賴於選擇有效(適合)的演算法。

針對陣列進行從大到小(或從小到大)的排序。例如:管理系統中按照成績的排序,按閱讀量對文章的排序等。

資料快速的計算與排序,與前端頁面效能有直接的關係。(譬如在頁面中有10000條的資料需要靠js進行排序,採用不同的演算法所消耗的時間差距甚大,直接影響著**的使用者體驗)

較為常見的排序方法,包括:氣泡排序、選擇排序、快速排序、二分法插入排序等。

由於排序的演算法有很多,在本次「演算法系列」的分享當中,我們先從簡單易上手的選擇排序法開始,其它的排序演算法會隨後陸續跟大家一起分享。

先找到序列中最小的數,將它和序列中第乙個數交換位置;

接下來,在剩下的序列中繼續此操作:找到最小的數,將它和序列中的第二個數交換位置;

依此類推,直到將整個序列排序完成。

簡言之,選擇排序就是 —— 不斷地選擇剩餘序列中的最小者,然後與未排序數列的「第乙個」數字交換位置。

如下陣列中,黑色代表待排序,藍色代表已排序

排序次數:序列長度 – 1(注意,不是比較次數);

因為序列中的最後乙個數不需要再次比較大小,故排序次數為 序列長度 – 1。

序列中找到最小的數,並記錄該數的索引值;

因為minindex預設開始為0,則第乙個數無需與自身比較,所以j = i + 1;

// 遍歷序列,找到最小的數

for (var j = i + 1; j < len; j++) ;};

在排序次數內多次遍歷找到最小的數,因此需要再用乙個for語句來進行控制。

// 排序次數

for (var i = 0; i < len - 1; i++) ;

};};

利用temp變數,實現兩陣列元素之間數值的交換,也就是互動位置。

temp = arr[i];

arr[i] = arr[minindex];

arr[minindex] = temp;

var arr = [9, 8, 3, 1, 2, 4],

len = arr.length,

minindex, temp;

// 排序次數

// html5學堂

for (var i = 0; i < len - 1; i++) ;

};// html5學堂出品

// 兩數互動位置

temp = arr[i];

arr[i] = arr[minindex];

arr[minindex] = temp;

};console.log(arr);

演算法複雜度分為時間複雜度和空間複雜度(時間和空間是計算機最重要的資源,因此複雜度分為時間和空間)。

時間複雜度:指執行演算法所需要的計算工作量;

空間複雜度:指執行演算法所需要的記憶體空間。

時間複雜度是總運算次數表示式中受n的變化影響最大的項(不含係數);

第一次迴圈比較n-1次,然後是n-2次,n-3次,依此類推,最後一次迴圈比較1次,總的比較次數和為(n - 1 + 1) * n / 2,即進行比較操作的時間複雜度為o(n^2)

tips:選擇排序的比較次數與序列的初始排序無關。

空間複雜度:o(1)

排序演算法需要乙個額外的空間(temp變數)來交換元素的位置。

選擇排序是一種不穩定排序的演算法。

比如:序列[3, 8, 3, 1, 9 ],第一次迴圈第1個元素3會和1交換,變成[1, 8, 3, 3, 9],此時,原序列中兩個3的先後順序被破壞。

演算法之旅 選擇排序法

html5學堂 碼匠 資料快速的計算與排序,與前端頁面效能有直接的關係。由於排序的演算法有很多,在本次 演算法系列 的分享當中,我們先從簡單易上手的選擇排序法開始,其它的排序演算法會隨後陸續跟大家一起分享。為解決乙個問題而採取的方法和步驟,稱為演算法。我們可以把演算法看成一本 福字剪紙教程 其中每一...

演算法之旅 快速排序法

html5學堂 碼匠 前幾期 演算法之旅 跟大家分享了氣泡排序法和選擇排序法,它們都屬於時間複雜度為o n 2 的 慢 排序。今天跟大家分享多種排序演算法裡使用較廣泛,速度快的排序演算法 快速排序法 平均時間複雜度為o n logn tips 2 如果無特殊說明,本文的快速排序是從小到大的排序。快速...

演算法之旅 氣泡排序法

html5學堂 碼匠 本期繼續走入演算法 氣泡排序法。氣泡排序演算法相對簡單,容易上手,穩定性也比較高,算是一種較好理解的演算法,也是面試官高頻提問的演算法之一。從序列頭部開始遍歷,兩兩比較,如果前者比後者大,則交換位置,直到最後將最大的數 本次排序最大的數 交換到無序序列的尾部,從而成為有序序列的...