簡單說一說排序演算法

2021-07-27 16:53:15 字數 1980 閱讀 5236

作為一名合格的程式設計師,還是要懂一些排序演算法。

學習這個話題,通常都會先學氣泡排序,因為它在所有的排序演算法中是最簡單也是最**的。當然,簡單是不會有好結果的。它的效能也是最差的。

氣泡排序通過比較任何兩個相鄰的項,如果第乙個比第二個打,則交換它們。元素項向上移動至正確的順序,就好像氣泡從水中往上冒一樣。冒泡因此得名。

具體實現**:

function

bubblesort

(array)}}

}

上面**注釋部分是對冒泡演算法的優化:通過從內迴圈中減去外迴圈中一跑過的輪數,避免內迴圈中所有不必要的比較。

第二種演算法是選擇排序,選擇排序演算法是一種原址比較排序演算法。含義就是找到資料結構中的最小值並將其放置在第一位,接著找到第二小的值並將其放在第二位,以此類推。

實現**:

function

selectionsort

(array)

}if(i !== indexmin)

}}

第三種排序演算法是插入排序,插入排序比較好理解,現實生活中比較明顯的例子就是插牌。你鬥地主的時候,一手牌拿著,然後從第二張開始排列,跟前面的序列進行對比。如果比前面的小則插到前面。

實現**:

function

insertionsort

(array)

array[j] = temp;

}}

排序小型陣列時,此演算法比前面兩個效能要好。

第四種排序演算法是歸併排序,這也是第乙個可以被實際使用的排序演算法。歸併排序是一種分治演算法,思路是將原始陣列切分成比較小的陣列,直到每個小陣列只有乙個位置,接著將小陣列歸併成較大的陣列,直到最後只有乙個排序完畢的大陣列。歸併排序應用的是遞迴的方式。

function mergesort (array)

var mergesortrec = function(array)

var mid = math.floor(length / 2),

left = array.slice(0 , mid),

right = array.slice(mid , length);

return merge(mergesortrec(left) , mergesortrec(right));

}var merge = function(left , right)else}}

while(il < left.length)

while(ir < right.length)

return result;

}

可以看到,演算法首先將原始陣列分割直至只有乙個元素的子陣列,然後開始歸併。

第五種排序演算法是快速排序,也是最常用的排序演算法了。同樣也是用了分治演算法。

「快速排序」的思想很簡單,整個排序過程只需要三步:

(1)在資料集之中,選擇乙個元素作為」基準」(pivot)。

(2)所有小於」基準」的元素,都移到」基準」的左邊;所有大於」基準」的元素,都移到」基準」的右邊。

(3)對」基準」左邊和右邊的兩個子集,不斷重複第一步和第二步,直到所有子集只剩下乙個元素為止。

function

quicksort

(arr)

var pivotindex = math.

floor(arr.

length / 2);

var pivot = arr.splice(pivotindex, 1)[0];

var left = ;

var right = ;

for (var i = 0; i

< arr.

length; i++)

else

}return quicksort(left).concat([pivot], quicksort(right));

}

封裝後的源**

簡單的說一說mmap

mmap memory map,就是記憶體對映 簡單的說就是將檔案對映到使用者的位址空間中。這麼做有什麼好處呢?1.傳統檔案訪問方式是,首先用open系統呼叫開啟檔案,然後使用read,write等呼叫進行順序或者隨即的i o.這種方式是非常低效的,每一次i o操作都需要一次系統呼叫.而通過mmap...

說一說 r與 n

今天在用python讀取txt檔案的時候,遇到了乙個比較坑的問題,那就是 n 和 r 究竟有什麼區別?在計算機還沒有出現之前,人們設計了一種機器叫做電傳打字機,這種機器每秒鐘可以打10個字元。不過它有個問題,就是打完一行換行的時候,需要0.2s,正好可以列印兩個字元,如果這個時候有新的字元傳過來,那...

說一說JS的IIFE

iife immediately invoked function expression,意為立即呼叫的函式表示式,也就是說,宣告函式的同時立即呼叫這個函式。對比一下,這是不採用iife時的函式宣告和函式呼叫 function foo foo 下面是iife形式的函式呼叫 functionfoo 函...