อาร์เรย์ที่กำหนดไว้หมายถึงการขัดขวางลำดับขององค์ประกอบทั้งหมดในอาร์เรย์
วิธีการทั่วไปคือการผ่านฟังก์ชั่นไปยังวิธีการเรียงลำดับดั้งเดิมของอาร์เรย์ซึ่งสุ่มส่งคืน 1 หรือ -1 เพื่อให้บรรลุวัตถุประสงค์ของการจัดเรียงองค์ประกอบอาเรย์แบบสุ่ม
การคัดลอกรหัสมีดังนี้:
arr.sort (ฟังก์ชั่น (a, b) {return math.random ()>. 5? -1: 1;});
แม้ว่าวิธีนี้จะใช้งานง่าย แต่ก็ไม่มีประสิทธิภาพ หลังจากการทดสอบของฉันมันทำให้องค์ประกอบ 10,000 รายการยุ่งเหยิงและเวลาที่ใช้เวลาประมาณ 35ms (Firefox)
ฉันมักจะมีคุณภาพที่ยอดเยี่ยมในการทำลายหม้อตุ๋นเพื่อถามจุดจบดังนั้นฉันจึงพบวิธีที่มีประสิทธิภาพ ดูข้อความต้นฉบับนี้
การคัดลอกรหัสมีดังนี้:
if (! array.prototype.shuffle) {
array.prototype.shuffle = function () {
สำหรับ (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], [i] = นี้ [j], [j] = x);
คืนสิ่งนี้;
-
-
arr.shuffle ();
วิธีนี้เพิ่มฟังก์ชั่นใน array.prototype เรียกว่า Shuffle - แต่ชื่อไม่สำคัญสิ่งที่สำคัญคือประสิทธิภาพของมัน
ใช้อาร์เรย์ 10,000 องค์ประกอบด้านบนเพื่อทดสอบ ใช้เวลาเพียง 7 หรือ 8 มิลลิวินาทีในการดำเนินการให้เสร็จสมบูรณ์โดยใช้วิธีนี้
เพิ่มองค์ประกอบอาร์เรย์ 10 เท่าเป็น 100,000 สำหรับการทดสอบ วิธีการเรียงลำดับแรกใช้เวลาประมาณ 500+ms และวิธีการสลับใช้เวลาประมาณ 40ms ความแตกต่างมีขนาดใหญ่มาก
รหัสทดสอบที่สมบูรณ์:
การคัดลอกรหัสมีดังนี้:
count var = 100000, arr = [];
สำหรับ (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 = วันที่ใหม่ (). getTime ();
document.write (t1-t);
// วิธีการต่อไปนี้มีประสิทธิภาพมากที่สุด
if (! array.prototype.shuffle) {
array.prototype.shuffle = function () {
สำหรับ (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], [i] = นี้ [j], [j] = x);
คืนสิ่งนี้;
-
-
var t = วันที่ใหม่ (). getTime ();
arr.shuffle ();
document.write ('
'+arr+'
-
var t1 = วันที่ใหม่ (). getTime ();
document.write (t1-t);
นอกจากนี้คุณสังเกตเห็นการวนรอบในรหัสสับเปลี่ยนหรือไม่? มันไม่มีครึ่งหลัง! นั่นคือมีเพียง (.. ) แต่ไม่ใช่ {.. } ต่อไปนี้ดังนั้นคุณสามารถเขียนด้วยวิธีนี้! และมันก็ดำเนินการตามปกติ! มันอยากรู้อยากเห็นมากฉันต้องไปที่ Blog Park เพื่อถาม