A. JS常見排序演算法
排序演算法說明:
(1)對於評述演算法優劣術語的說明
穩定 :如果a原本在b前面,而a=b,排序之後a仍然在b的前面;
不穩定 :如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面;
內排序 :所有排序操作都在內存中完成;
外排序 :由於數據太大,因此把數據放在磁碟中,而排序通過磁碟和內存的數據傳輸才能進行;
時間復雜度 : 一個演算法執行所耗費的時間。
空間復雜度 : 運行完一個程序所需內存的大小。
(2)排序演算法圖片總結:
1.冒泡排序:
解析:1.比較相鄰的兩個元素,如果前一個比後一個大,則交換位置。
2.第一輪的時候最後一個元素應該是最大的一個。
3.按照步驟一的方法進行相鄰兩個元素的比較,這個時候由於最後一個元素已經是最大的了,所以最後一個元素不用比較。
2.快速排序:
解析:快速排序是對冒泡排序的一種改進,第一趟排序時將數據分成兩部分,一部分比另一部分的所有數據都要小。然後遞歸調用,在兩邊都實行快速排序。
3.插入排序:
解析:
(1) 從第一個元素開始,該元素可以認為已經被排序
(2) 取出下一個元素,在已經排序的元素序列中從後向前掃描
(3) 如果該元素(已排序)大於新元素,將該元素移到下一位置
(4) 重復步驟3,直到找到已排序的元素小於或者等於新元素的位置
(5)將新元素插入到下一位置中
(6) 重復步驟2
2.二分查找:
解析:二分查找,也為折半查找。首先要找到一個中間值,通過與中間值比較,大的放又,小的放在左邊。再在兩邊中尋找中間值,持續以上操作,直到找到所在位置為止。
(1)遞歸方法
(2)非遞歸方法
4.選擇排序:
解析:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。
以此類推,直到所有元素均排序完畢。
5.希爾排序:
解析:先將整個待排序的記錄序列分割成為若乾子序列分別進行直接插入排序
6.歸並排序:
解析:歸並排序是一種穩定的排序方法。將已有序的子序列合並,得到完全有序的序列;即先使每個子序列有序,再使子序列段間有序。
7.堆排序:
解析:堆排序(Heapsort)是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質:即子結點的鍵值或索引總是
小於(或者大於)它的父節點。
8.計數排序:
解析:計數排序使用一個額外的數組C,其中第i個元素是待排序數組A中值等於i的元素的個數。然後根據數組C來將A中的元素排到正確的位置。它只能對整數進行排序。
9.桶排序:
解析:假設輸入數據服從均勻分布,將數據分到有限數量的桶里,每個桶再分別排序(有可能再使用別的排序演算法或是以遞歸方式繼續使用桶排序進行排
10.基數排序:
解析:基數排序是按照低位先排序,然後收集;再按照高位排序,然後再收集;依次類推,直到最高位。有時候有些屬性是有優先順序順序的,先按低優先順序排序,再按高優
先級排序。最後的次序就是高優先順序高的在前,高優先順序相同的低優先順序高的在前。基數排序基於分別排序,分別收集,所以是穩定的。
基數排序 vs 計數排序 vs 桶排序
這三種排序演算法都利用了桶的概念,但對桶的使用方法上有明顯差異:
基數排序:根據鍵值的每位數字來分配桶 計數排序:每個桶只存儲單一鍵值 桶排序:每個桶存儲一定范圍的數值
B. JS中的各種排序方法
數據結構演算法中排序有很多種,常見的、不常見的,至少包含十種以上。根據它們的特性,可以大致分為兩種類型:比較類排序和非比較類排序
冒泡排序是一次比較兩個元素,如果順序是錯誤的就把它們交換過來。,直到不需要再交換
快速排序的基本思想是通過一趟排序,將待排記錄分隔成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分的關鍵字小,則可以分別對這兩部分記錄繼續進行排序,以達到整個序列有序
從數列中挑出一個元素,稱為 「基準」(pivot);然後重新排序數列,所有元素比基準值小的擺放在基準前面、比基準值大的擺在基準的後面;在這個區分搞定之後,該基準就處於數列的中間位置;然後把小於基準值元素的子數列(left)和大於基準值元素的子數列(right)遞歸地調用 quick 方法排序完成,這就是快排的思路
通過構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應位置並插入,從而達到排序的效果
插入排序的思路是基於數組本身進行調整的,首先循環遍歷從 i 等於 1 開始,拿到當前的 current 的值,去和前面的值比較,如果前面的大於當前的值,就把前面的值和當前的那個值進行交換,通過這樣不斷循環達到了排序的目的
將最小的元素存放在序列的起始位置,再從剩餘未排序元素中繼續尋找最小元素,然後放到已排序的序列後面……以此類推,直到所有元素均排序完畢
堆排序是指利用堆這種數據結構所設計的一種排序演算法。堆積是一個近似完全二叉樹的結構,並同時滿足堆積的性質,即子結點的鍵值或索引總是小於(或者大於)它的父節點。堆的底層實際上就是一棵完全二叉樹,可以用數組實現
歸並排序是建立在歸並操作上的一種有效的排序演算法,該演算法是採用分治法的一個非常典型的應用。將已有序的子序列合並,得到完全有序的序列;先使每個子序列有序,再使子序列段間有序。若將兩個有序表合並成一個有序表,稱為二路歸並
通過 mid 可以把該數組分成左右兩個數組,分別對這兩個進行遞歸調用排序方法,最後將兩個數組按照順序歸並起來
C. javascript中的冒泡排序法
AVA氣泡分類法
拓展資料
氣泡排序的原理是,有五個數字54321,例如從小到大排列。
首先比較前兩個,5個和4個,如果第一個小於第二個,沒有運算,如果第一個大於第二個,則交換兩個位置,即45321個,然後第二個和第三個,交換位置,變成43521個,然後第三個和第四個,第四個和第五個,這樣的時間周期下來,轉向。進入43215
因此,一個循環的效果是挑選出最大的數字5並將其泡泡到底。但是選擇第二,第三等等。因此,一層循環是不夠的,它必須是另一層。例如,五個數字,至少四個周期。至於為什麼這個,長度-i,是因為第一個比較五個數字,第二個只要第一個四將做,第五個必須是最大的。
var數組=〔5, 4, 3,2, 1〕;
VATP=0;
對於(var i=0;i <數組,長度;i++)
{
對於(var j=0;j<數組,長度-i;j++)
{
IF(數組[j] >數組[j+1])
{
TEMP=數組[J+1 ];
數組[j+2]=數組[j];
數組[j]=TEMP;
}
}
}
控制台,日誌(數組);