Melaksanakan kaedah shuffling tatasusunan yang paling berkesan dalam kemahiran JavaScript_javascript

WBOY
Lepaskan: 2016-05-16 16:34:10
asal
1977 orang telah melayarinya

Penyusunan semula tatasusunan bermaksud mengganggu susunan semua elemen dalam tatasusunan.

Kaedah biasa ialah menghantar fungsi ke dalam kaedah isihan asli bagi tatasusunan Fungsi ini mengembalikan 1 atau -1 secara rawak untuk mencapai tujuan menyusun unsur tatasusunan secara rawak.

Salin kod Kod adalah seperti berikut:

arr.sort(function(a,b){ return Math.random()>.5 ? -1 : 1;});

Walaupun kaedah ini intuitif, ia tidak begitu cekap Selepas ujian saya, masa yang diperlukan untuk merangkak susunan 10,000 elemen ialah kira-kira 35ms (firefox)

Saya sentiasa mempunyai kualiti yang baik untuk meminta jawapan, jadi saya mencari kaedah yang cekap. Lihat teks asal di sini

Salin kod Kod adalah seperti berikut:

jika (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j ] = x);
         kembalikan ini;
};
}
arr.shuffle();

Kaedah ini menambah fungsi pada Array.prototype yang dipanggil shuffle - tetapi namanya tidak penting, yang penting ialah kecekapannya.

Ambil tatasusunan saya di atas yang mengandungi 10,000 elemen untuk menguji Ia hanya mengambil masa 7 atau 8 milisaat untuk menyelesaikan operasi luar pesanan menggunakan kaedah ini.

Tingkatkan elemen tatasusunan 10 kali ganda kepada 100000 untuk menguji Kaedah isihan pertama mengambil masa kira-kira 500 ms, dan kaedah shuffle mengambil masa kira-kira 40 ms.

Kod ujian penuh:

Salin kod Kod adalah seperti berikut:

kiraan var = 100000,arr = [];
untuk(var i=0;i.5 ? -1 : 1;});
Array.prototype.sort.call(arr,function(a,b){ return Math.random()>.5 ? -1 : 1;});
document.write(arr '
');
var t1 = new Date().getTime();
document.write(t1-t);

//Kaedah berikut adalah yang paling berkesan
jika (!Array.prototype.shuffle) {
Array.prototype.shuffle = function() {
for(var j, x, i = this.length; i; j = parseInt(Math.random() * i), x = this[--i], this[i] = this[j], this[j ] = x);
         kembalikan ini;
};
}
var t = new Date().getTime();
arr.shuffle();
document.write('
' arr '
');
var t1 = new Date().getTime();
document.write(t1-t);

Selain itu, adakah anda perasan bahawa gelung for dalam kod shuffle tidak mempunyai separuh masa kedua! Iaitu, hanya ada untuk(..) tetapi tiada {..} di belakangnya. Ia boleh ditulis seperti ini! Dan ia sebenarnya dilaksanakan secara normal! Ia ingin tahu, saya perlu pergi ke taman blog dan bertanya.

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!