以下是在javascript中用10 000 000個隨機元素實作快速排序的方法:
function swap(arr, i1, i2) {
const temp = arr[i1];
arr[i1] = arr[i2)
arr[i2] = temp;
}
function pivot(arr, l, r){
let pvt = arr[r];
let i = l - 1;
for (let j = l; j <= r - 1; j ) {
if (arr[j] < pvt) {
i ;
swap(arr, i, j)。
}
}
swap(arr, i 1, r)。
return i 1;
}
function quick_sort(arr, l, r) {
if (l < r) {
let pvt = pivot(arr, l, r)。
quick_sort(arr, l, pvt - 1)。
quick_sort(arr, pvt 1, r)。
}
}
let arr = Array.from(Array(10000000)) 。 map((_) => Math.random() )。)
console.time(" quick_sort")。
quick_sort(arr, 0, arr.length - 1) 。
console.timeEnd(" quick_sort")。
對一個陣列進行排序需要≈1.5s。
當我在python中測驗相同的時候:
import time
import random
from numpy import random
def quicksort(arr)。
qs(arr, 0, len(arr) - 1)
def qs(arr, l, r)。
if l >= r。
回傳。
p = partition(arr, l, r)
qs(arr, l, p - 1)
qs(arr, p 1, r)
def partition(arr, l, r)。
pivot = arr[r]
i = l - 1: pivot = arr[r].
for j in range(l,r)。
if arr[j] < pivot:
i = 1 1], arr[r] = arr[r], arr[i 1]
return i 1 ]
array = random.rand(10000000)
start = time.time()
quicksort(array)
print("Seconds: ", time.time() - start)
如果使用random.rand(10000000)
,對一個陣列進行排序需要≈131s。
而如果使用array = [random.random() for _ in range(10000000)],則需要≈60s。
這個差異從何而來?
這種差異從何而來?
uj5u.com熱心網友回復:
這取決于你使用的是哪個Python解釋器。
我假設你使用的是cpython 3,我相信它沒有JIT。您擁有解釋型語言的所有開銷,但卻沒有任何技巧來加快事情的進展。
大多數現代 JS 引擎都有 JIT,因此熱代碼路徑得到了優化。
與此相關的是,numpy 的速度更快,因為 內部代碼是 C 或 Fortran,它通過系結被呼叫。
在軟體工程堆疊交流上有一篇較長的帖子,其中更深入地探討了原生 python 不如 JS 快的原因。
。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/332772.html
標籤:
