Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

วิธีการใช้การเรียงลำดับการแทรกใน JavaScript?


การเรียงลำดับการแทรก

เป็นการจัดเรียงแบบเปรียบเทียบที่ง่ายมากในการจัดเรียงอาร์เรย์ ประเภทเปรียบเทียบ เปรียบเทียบค่าปัจจุบันที่เราพยายามจัดเรียงกับค่าอื่นๆ ในอาร์เรย์ โดยจะทำงานกับทีละรายการและวางแต่ละรายการในตำแหน่งที่ถูกต้องซ้ำๆ เพื่อให้ได้อาร์เรย์ที่จัดเรียงตามที่ต้องการ

อันที่จริง การแทรก sort ไม่ได้มีประสิทธิภาพเท่ากับอัลกอริธึมขั้นสูงบางอย่าง เช่น heap sort หรือ การเรียงลำดับการผสาน . ไม่ใช่ตัวเลือกที่ดีที่สุดในขณะที่ต้องรับมือกับโปรแกรมขนาดใหญ่ เนื่องจาก ค่าคงที่ที่ซ่อนอยู่ต่ำ การเรียงลำดับการแทรกมีประสิทธิภาพเหนือกว่าอัลกอริธึมขั้นสูงบางตัว เช่น การเรียงลำดับแบบฮีปหรือการเรียงลำดับอย่างรวดเร็ว ในขณะที่จัดการกับ อาร์เรย์ขนาดเล็ก .

การเรียงลำดับการแทรก ทำงานโดยเลื่อนจากซ้ายไปขวาบนอาร์เรย์ จะใช้ รายการปัจจุบัน เป็น 'กุญแจ' และค้นหาค่าทางด้านซ้ายของคีย์นั้นเพื่อค้นหาตำแหน่งที่คีย์ควรจะอยู่จริง

อัลกอริทึม

ในตัวอย่างต่อไปนี้ อาร์เรย์ที่ระบุคือ 0,-3,5,8,2,7,6

  • การวนซ้ำ 0 - ในการวนซ้ำครั้งแรก เรามีเฉพาะอาร์เรย์ที่ไม่ได้เรียงลำดับจริงเท่านั้น นั่นคือ 0,-3,5,8,2,7,6
  • วนซ้ำ 1 - ในการทำซ้ำนี้ คีย์คือค่าที่ดัชนี 1 นั่นคือ -3 การเรียงลำดับการแทรกจะเปรียบเทียบคีย์กับค่าทางด้านซ้ายของคีย์นั้นและดำเนินการตามขั้นตอน เนื่องจาก -3 น้อยกว่า 0 มันจะเลื่อนไปทางซ้ายของ 0 โดยกำหนดให้อาร์เรย์เป็น -3,0,5,8,2,7,6
  • ซ้ำ 2 - กุญแจสำคัญคือ 5 (ค่าที่ดัชนี 2) โดยจะนำไปเปรียบเทียบกับค่าทางด้านซ้ายซึ่งก็คือ -3 และ 0 และนำไปใส่ไว้ในค่าที่จัดเรียงไว้ ดังนั้นอาร์เรย์หลังการวนซ้ำ 2 คือ -3,0,5,8,2,7,6
  • ซ้ำ 3 - ในการวนซ้ำนี้ ค่าคีย์ 8 จะถูกเปรียบเทียบกับองค์ประกอบทางด้านซ้าย และอาร์เรย์สุดท้ายจะเป็น -3,0,5,8,2,7,6
  • ซ้ำ 4 - ในการทำซ้ำนี้ ค่าคีย์ 2 จะถูกเปรียบเทียบกับค่าทางด้านซ้ายและวางในตำแหน่งที่จัดเรียง ดังนั้นอาร์เรย์สุดท้ายหลังจากการวนซ้ำ 4 คือ -3,0,2,5,8,7,6

ในทำนองเดียวกัน เมื่อสิ้นสุดการวนซ้ำครั้งสุดท้าย อาร์เรย์ที่เรียงลำดับจะเป็น -3,0,2,5,6,7,8

ตัวอย่าง

<html>
<head>
<script>
   function iSort(array)  {
      for (var p = 1; p < array.length; p++)   {
   if (array[p] < array[0]){
      array.unshift(array.splice(p,1)[0]);
   }
   else if (array[p] > array[p-1]){
      continue;
   }
   else {
      for (var q = 1; q < p; q++) {
         if (array[p] > array[q-1] && array[p] < array[q]){
            array.splice(q,0,array.splice(p,1)[0]);
            }
          }
       }
   }
   return array;
   }
   document.write(iSort([0,-3,5,8,2,7,6]));
</script>
</body>
</html>

ผลลัพธ์

-3,0,2,5,6,7,8