ผสานเรียง
ในความท้าทายนี้คุณจะใช้รูทีนย่อยผสานของการเรียงลำดับการผสาน โดยเฉพาะคุณต้องสร้างฟังก์ชั่นหรือโปรแกรมหรือคำกริยาหรือที่คล้ายกันซึ่งจะมีสองรายการแต่ละเรียงในลำดับที่เพิ่มขึ้นและรวมไว้ในหนึ่งรายการเรียงตามลำดับที่เพิ่มขึ้น ที่ต้องการ:
- อัลกอริทึมของคุณจะต้องใช้เวลาเชิงเส้นแบบเชิงเส้นเท่ากับขนาดของอินพุต โปรดหยุดการแก้ปัญหา O (n ^ 2)
- คุณไม่สามารถใช้ฟังก์ชั่นในตัวที่มีความสามารถในการเรียงลำดับรายการหรือรวมรายการหรืออะไรทำนองนั้น ดุลยพินิจของผู้เขียน
- รหัสควรจะสามารถจัดการองค์ประกอบที่ซ้ำกัน
- ไม่ต้องกังวลกับรายการที่ว่างเปล่า
ตัวอย่าง:
merge([1],[0,2,3,4])
[0,1,2,3,4]
merge([1,5,10,17,19],[2,5,9,11,13,20])
[1, 2, 5, 5, 9, 10, 11, 13, 17, 19, 20]
นี่คือรหัส - กอล์ฟดังนั้นรหัสที่สั้นที่สุดอาจชนะ!
b=a;b=b.length
อาจทำซ้ำอาร์เรย์ทั้งหมดa
(และส่งผลให้เวลา O (n ^ 2) ถ้าดำเนินการสำหรับทุกองค์ประกอบ) หรือทำซ้ำเพียงอ้างอิงถึงอาร์เรย์ (O (n) เวลา) อันไหนมีค่า?