演算法的效率可以用**時間複雜度o(n)**來度量。時間複雜度反應了程式執行時間隨輸入規模增長而增長的量級,很大程度上能反應演算法的優略程度。
我們最開始認識的排序方法有氣泡排序和選擇排序但是這個演算法的效率怎麼樣呢,讓我們來測試一下。
首先,我們隨機生成乙個長度為100000的隨機數組,並選用選擇排序的方法來對陣列進行排序,並測試所花的時間。
結果如下,大概花費了9757ms:
然後,我們再使用氣泡排序來測試一下。
我們發現,氣泡排序花費的時間更長。如下圖所示:
下面我們了解一下適合處理較大資料的快速排序。
快速排序:把陣列通過一次排序分割成三部分:左半部分、中間數、右半部分,左半部分的數全部都比右半部分小。然後對左半部分和右半部分分別再進行一次排序,再分割,這樣迴圈下去,直到不能再分割為止。它能達到最佳和平均時間複雜度均為o(n·logn)。
tips:計算消耗時間的另一種方法:
console.time();
//這裡是要計算消耗時間的**
console.timeend();
快速排序演算法實現如下:
let randomarr = new array(100000)
.fill(0)
.map((item, index, array)=> index)
.sort(()=> math.random()-.5);
//尋找中間數
function findmid(arr, left, right)
[arr[left],arr[right]] = [arr[right],arr[left]];
while(left < right && arr[left] < arr[right])
[arr[left],arr[right]] = [arr[right],arr[left]];
}return left;
} //快速排序演算法
function qsort(arr, start, end)
console.time();
qsort(randomarr, 0, 99999);
console.timeend();
執行結果如下,與前面兩種演算法相比,效率大大提高:
排序 選擇 冒泡 快排
簡單介紹三種常見的排序方法 選擇 冒泡 快排。從大到小排列 選擇排序是在所有資料中先選擇第乙個資料作為最大值,依次和後面的每乙個資料比較,如果比最大值大,替換最大值並且記住索引,遍歷結束後,通過索引把最大值和第乙個資料替換。後面的資料依次執行一遍,就可以得到從大到小排列的資料了。如下 4 void ...
學習 排序演算法 快排 選擇 冒泡 桶排序
稍微複習 學習 了一下排序的演算法 選擇 冒泡 桶 快排等 下面的 和講解也是這幾種排序,至於歸併 基數啥的想單獨開一篇部落格 以下單獨 均涉及巨集定義,可以先看思路再到最後看巨集定義內容 本部落格針對洛谷p1177排序模板 並已通過大資料對拍 為公升序排序 快速排序 stl 好,直接sort 想降...
排序演算法(快排,冒泡)
排序目的 快速查詢 排序演算法優劣的判斷條件 1.時間複雜度 2.空間複雜度 3.穩定性 關鍵字值相等的數字們,排完序之後順序不變 十大排序演算法 需要掌握的的 氣泡排序 快速排序 希爾排序 折半插入排序 堆排序 氣泡排序 依次比較第i個數與第i 1個數的大小,如果符合條件則不變,如果不符合條件,兩...