เรานับจำนวนขององค์ประกอบอาร์เรย์อ่านและเขียน หากต้องการเรียงลำดับฟองอากาศคุณต้องมีการเข้าถึง (การเขียนเริ่มต้นไปยังจุดสิ้นสุดจากนั้นในกรณีที่เลวร้ายที่สุดสองครั้งอ่านและสองเขียนเพื่อทำnสลับ) ในการค้นหาไบนารีเราต้องการ2 log n + 2 n + 1 ( 2 log nสำหรับการค้นหาแบบไบนารีจากนั้นในกรณีที่เลวร้ายที่สุด2 nเพื่อเลื่อนองค์ประกอบอาร์เรย์ไปทางขวาแล้ว 1 เพื่อเขียนองค์ประกอบอาร์เรย์ไปที่ ตำแหน่งที่เหมาะสม)1 + 4 nn2 บันทึกn + 2 n + 12 บันทึกn2 n
ดังนั้นทั้งสองวิธีจึงมีความซับซ้อนเหมือนกันสำหรับการใช้งานอาร์เรย์ แต่วิธีการค้นหาแบบไบนารีต้องการการเข้าถึงอาร์เรย์ที่น้อยลงในระยะยาว ... มีปัจจัยอื่น ๆ ที่เล่นตามธรรมชาติ
ที่จริงแล้วคุณสามารถใช้การใช้งานที่ดีขึ้นและนับเฉพาะการเข้าถึงอาร์เรย์จริง (ไม่เข้าถึงองค์ประกอบที่จะแทรก) คุณสามารถทำสำหรับฟองเรียงลำดับและเข้าสู่ระบบn + 2 n + 1สำหรับการค้นหาไบนารี ... ดังนั้นหากการเข้าถึงลงทะเบียน / แคชมีราคาถูกและการเข้าถึงอาร์เรย์ที่มีราคาแพงจากการค้นหาที่สิ้นสุดและขยับไปพร้อมกัน (อย่างชาญฉลาด การเรียงลำดับฟองสำหรับการแทรก) อาจทำได้ดีกว่าแม้ว่าจะไม่ใช่แบบไม่แสดงอาการ2 n + 1เข้าสู่ระบบn + 2 n + 1
ทางออกที่ดีกว่าอาจเกี่ยวข้องกับการใช้โครงสร้างข้อมูลที่แตกต่างกัน อาร์เรย์ให้สิทธิ์การเข้าถึง O (1) (การเข้าถึงแบบสุ่ม) แต่การแทรกและการลบอาจมีค่าใช้จ่าย ตารางแฮชอาจมีการแทรก & การลบ O (1) การเข้าถึงจะมีค่าใช้จ่าย ตัวเลือกอื่น ๆ ได้แก่ BSTs และฮีปเป็นต้นมันอาจคุ้มค่าที่จะพิจารณาการใช้งานแอปพลิเคชันของคุณสำหรับการแทรกการลบและการเข้าถึงและเลือกโครงสร้างที่มีความพิเศษมากขึ้น
โปรดทราบด้วยว่าหากคุณต้องการเพิ่มองค์ประกอบลงในอาร์เรย์ที่เรียงลำดับขององค์ประกอบnความคิดที่ดีอาจเป็นการเรียงลำดับรายการmอย่างมีประสิทธิภาพจากนั้นจึงรวมสองอาร์เรย์เข้าด้วยกัน นอกจากนี้อาร์เรย์ที่เรียงลำดับสามารถสร้างได้อย่างมีประสิทธิภาพโดยใช้เช่นฮีป (เรียงลำดับฮีพ)ม.nm