การเรียงลำดับการแทรกเทียบกับอัลกอริทึมการเรียงลำดับฟอง


87

ฉันกำลังพยายามทำความเข้าใจอัลกอริทึมการจัดเรียงบางอย่าง แต่ฉันกำลังดิ้นรนเพื่อให้เห็นความแตกต่างของอัลกอริทึมการเรียงลำดับฟองและการเรียงลำดับการแทรก

ฉันรู้ว่าทั้งคู่คือ O (n 2 ) แต่สำหรับฉันแล้วสำหรับฉันแล้วว่าการเรียงฟองเพียงแค่ฟองค่าสูงสุดของอาร์เรย์ไปที่ด้านบนสำหรับแต่ละรอบในขณะที่การเรียงลำดับการแทรกจะจมค่าต่ำสุดไปที่ด้านล่างของแต่ละรอบ พวกเขาไม่ได้ทำสิ่งเดียวกัน แต่ไปคนละทาง?

สำหรับการเรียงลำดับการแทรกจำนวนการเปรียบเทียบ / การแลกเปลี่ยนที่เป็นไปได้จะเริ่มต้นที่ศูนย์และเพิ่มขึ้นทุกครั้ง (เช่น 0, 1, 2, 3, 4, ... , n) แต่สำหรับการเรียงฟองลักษณะเดียวกันนี้จะเกิดขึ้น แต่ในตอนท้ายของ การเรียงลำดับ (เช่น n, n-1, n-2, ... 0) เนื่องจากการจัดเรียงฟองไม่จำเป็นต้องเปรียบเทียบกับองค์ประกอบสุดท้ายอีกต่อไปเมื่อมีการจัดเรียง

สำหรับทั้งหมดนี้ดูเหมือนว่าจะมีความเห็นเป็นเอกฉันท์ว่าการเรียงลำดับการแทรกจะดีกว่าโดยทั่วไป ใครช่วยบอกทีว่าทำไม?

แก้ไข: ฉันสนใจเป็นหลักในความแตกต่างของวิธีการทำงานของอัลกอริทึมไม่ใช่ประสิทธิภาพหรือความซับซ้อนแบบไม่แสดงอาการมากนัก


1
นี้เป็นเอกสารที่ดีอื่น ๆ : ดูตัวอย่างเช่นen.wikipedia.org/wiki/Sorting_algorithm ค่อนข้างไม่มีจุดหมายที่จะทำซ้ำที่นี่และคำตอบที่ดีจะขยายออกไป
Bathsheba

@Bathsheba 75 คนที่โหวตและ 88k ที่ดูคำถามดูเหมือนจะไม่เห็นด้วย )
พาร์เซกเกอร์

@parsecer: ฮา! ตอนนี้ฉันจะต้องตรวจสอบคำตอบ คำตอบที่ได้รับการโหวตสูงสุดในปัจจุบันมีประโยชน์ ไม่แน่ใจเกี่ยวกับคนอื่น ๆ นี่คือคะแนนตัวแทนบางส่วนที่หายไปจากการลงคะแนนคำตอบ คำยืนยัน "นั่นเป็นเหตุผลว่าทำไมการเรียงลำดับการแทรกจึงเร็วกว่าการเรียงลำดับฟอง" ในคำตอบที่ยอมรับนั้นไม่จำเป็นต้องเป็นความจริง
Bathsheba

@Bathsheba Oh no
parsecer

คำตอบ:


41

ในการเรียงฟองในการวนซ้ำคุณมีการวนซ้ำภายใน ni-1 (n ^ 2) / 2 ทั้งหมด แต่ในการเรียงลำดับการแทรกคุณมีการวนซ้ำสูงสุดของฉันในขั้นตอนที่ฉันทำ แต่ฉัน / 2 โดยเฉลี่ยเนื่องจากคุณสามารถหยุดวงในได้ ก่อนหน้านี้หลังจากที่คุณพบตำแหน่งที่ถูกต้องสำหรับองค์ประกอบปัจจุบัน คุณจึงมี (ผลรวมจาก 0 ถึง n) / 2 ซึ่งเป็น (n ^ 2) / 4 รวม;

นั่นเป็นเหตุผลว่าทำไมการเรียงลำดับการแทรกจึงเร็วกว่าการเรียงลำดับฟอง


2
ฉันคิดว่าคำอธิบายอัลกอริทึมอยู่บนเว็บทุกที่
sasha.sochka

4
ใช่ แต่ดูเหมือนว่า OP ยังไม่สามารถจับความแตกต่างในกลไกได้
UmNyobe

15
ดีที่คุณสามารถ sorta ถือว่าผมเข้าใจปัจจัยพื้นฐาน สิ่งที่ฉันต้องการคือการเปรียบเทียบและนี่เป็นสิ่งที่ดีจริงๆ ดังนั้นแนวคิดก็คือในขณะที่การเรียงลำดับการแทรกทำให้องค์ประกอบ ith จมลงและการเรียงฟองทำให้เกิดฟองขึ้นการเรียงลำดับการแทรกไม่ได้ทำให้มันหล่นลงไปที่ด้านล่างสุด แต่เพียงแค่ทำให้มันหล่นลงในตำแหน่งที่ถูกต้องใน ส่วนที่เรียงลำดับแล้ว ดังนั้นจึงทำการเปรียบเทียบ / แลกเปลี่ยนน้อยลง นั่นถูกต้องใช่ไหม?
Migwell

2
อะไร? "ดังนั้นคุณมี (ผลรวมจาก 0 ถึง n) / 2 ซึ่งเป็น (n ^ 2) / 4 ทั้งหมด" ที่ต้องมีการระเบิดบ้างโปรด! 0 + 1 + 2 + 3 + 4 + 5 = 15; 15/2 = 7.5; 7.5 * 4 = 30; sqrt (30) = พูดพล่อยๆ
John Smith

@JohnSmith ฉันเชื่อว่ามีข้อผิดพลาดเล็กน้อยในคำตอบ ผลรวมจาก 1 ถึง n คือ n * (n + 1) / 2 เนื่องจากเป็นจำนวนสามเหลี่ยม ค้นหาจำนวนสามเหลี่ยมเพื่อดูคำอธิบายเพิ่มเติม หารด้วย 2 ก็แค่ n * (n + 1) / 2
CognizantApe

124

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

หลังจากฉันทำซ้ำองค์ประกอบiแรกจะถูกเรียงลำดับ

ในการวนซ้ำแต่ละครั้งองค์ประกอบถัดไปจะถูกฟองผ่านส่วนที่เรียงลำดับจนกว่าจะถึงจุดที่ถูกต้อง:

sorted  | unsorted
1 3 5 8 | 4 6 7 9 2
1 3 4 5 8 | 6 7 9 2

4 จะถูกเติมลงในส่วนที่เรียงลำดับ

รหัสเทียม:

for i in 1 to n
    for j in i downto 2
        if array[j - 1] > array[j]
            swap(array[j - 1], array[j])
        else
            break

เรียงฟอง

หลังจากฉันทำซ้ำองค์ประกอบสุดท้ายของฉันจะใหญ่ที่สุดและเรียงลำดับ

ในการทำซ้ำแต่ละครั้งให้ลอดผ่านส่วนที่ไม่เรียงลำดับเพื่อหาค่าสูงสุด

unsorted  | biggest
3 1 5 4 2 | 6 7 8 9
1 3 4 2 | 5 6 7 8 9

5 เป็นฟองออกจากส่วนที่ไม่ได้เรียงลำดับ

รหัสเทียม:

for i in 1 to n
    for j in 1 to n - i
         if array[j] > array[j + 1]
             swap(array[j], array[j + 1])

โปรดทราบว่าการใช้งานทั่วไปจะสิ้นสุดลงก่อนกำหนดหากไม่มีการทำ swaps ในระหว่างการวนซ้ำรอบนอก (เนื่องจากนั่นหมายความว่าอาร์เรย์ถูกจัดเรียง)

ความแตกต่าง

ในองค์ประกอบการจัดเรียงการแทรกจะถูกทำให้เป็นฟองในส่วนที่เรียงลำดับในขณะที่ในการเรียงลำดับฟองจำนวนสูงสุดจะถูกปัดออกจากส่วนที่ไม่ได้เรียงลำดับ


10
ขอบคุณนี่ชัดเจนมาก! ฉันคิดว่าสิ่งสำคัญที่ฉันต้องการเน้นก็คือคำสั่งแบ่งในการเรียงลำดับการแทรกหมายความว่าสามารถยุติการวนซ้ำแต่ละครั้งได้เร็ว: กล่าวคือเมื่อพบตำแหน่งในส่วนที่เรียงลำดับแล้ว การจัดเรียงบับเบิ้ลกำหนดให้การสลับดำเนินต่อไปจนกว่าองค์ประกอบที่ใหญ่ที่สุดในส่วนที่ไม่ได้เรียงลำดับจะมาถึงส่วนที่เรียงลำดับดังนั้นจะไม่มีวันยุติก่อน มันเป็นบทสรุปที่ยอดเยี่ยมดังนั้น +1
Migwell

4
ฉันคิดว่านี่น่าจะเป็นคำตอบที่ดีที่สุด :)
Adelin

2
บวก 1 เพื่อความชัดเจนค่าทางยุทธวิธีและสำหรับค่าคงที่ของลูปหลักของแต่ละอัลกอริทึม น่าเสียดายที่ไม่มีการเปรียบเทียบความซับซ้อนอย่างชัดเจน (แสดงเป็นฟังก์ชันของn ) อย่างไรก็ตามฉันคิดว่ามันเป็นคำตอบที่ดีกว่าคำตอบที่ยอมรับเนื่องจากจากนี้ฉันจึงเห็นความแตกต่าง
Honza Zidek

ฉันถามได้ไหมว่าทำไมคุณถึงสลับรายการของคุณในรหัสแทรกเทียมของคุณในทุกขั้นตอน? ถ้า (a [j-1]> a [j]) แล้ว a [j] = a [j-1] ELSE ถ้า (a [j-1] <e && a [j]> จ) มากกว่า [j] = e; ทำลาย; โดยที่ e คือรายการที่ต้องจัดเรียง ด้วยวิธีนี้คุณจะไม่ได้เปลี่ยนรายการที่เรียงลำดับแล้วเพียงแค่คัดลอก รอคอยที่จะมีคำอธิบายเนื่องจากฉันสับสนเล็กน้อย
Karoly

@ Karoly ฉันเลือกเวอร์ชันของฉันเพราะมันง่ายกว่า ของคุณเร็วขึ้นเล็กน้อยเป็นการดีที่คุณจะชี้ให้เห็น Wikipediaอธิบายทั้งสองเวอร์ชัน
ทอม

16

ความแตกต่างอีกอย่างฉันไม่เห็นที่นี่:

การจัดเรียงฟองมีการกำหนดค่า 3 ค่าต่อการแลกเปลี่ยน : คุณต้องสร้างตัวแปรชั่วคราวก่อนเพื่อบันทึกค่าที่คุณต้องการผลักดันไปข้างหน้า (หมายเลข 1) กว่าที่คุณต้องเขียนตัวแปรสว็อปอื่นลงในจุดที่คุณเพิ่งบันทึกค่า ของ (หมายเลข 2) จากนั้นคุณต้องเขียนตัวแปรชั่วคราวของคุณในจุดอื่น (หมายเลข 3) คุณต้องทำเช่นนั้นสำหรับแต่ละจุด - ที่คุณต้องการไปข้างหน้า - เพื่อเรียงตัวแปรของคุณไปยังจุดที่ถูกต้อง

ด้วยการจัดเรียงการแทรกคุณใส่ตัวแปรเพื่อจัดเรียงในตัวแปรชั่วคราวจากนั้นวางตัวแปรทั้งหมดไว้ข้างหน้าจุด 1 จุดนั้นไปข้างหลังตราบใดที่คุณไปถึงจุดที่ถูกต้องสำหรับตัวแปรของคุณ ที่ทำให้ assignement 1 คุ้มค่าต่อจุด ในที่สุดคุณก็เขียนตัวแปรอุณหภูมิลงในจุด

ซึ่งทำให้การกำหนดมูลค่าน้อยลงมากเช่นกัน

นี่ไม่ใช่ผลประโยชน์ด้านความเร็วที่แข็งแกร่งที่สุด แต่ฉันคิดว่ามันสามารถกล่าวถึงได้

ฉันหวังว่าฉันจะแสดงออกว่าเข้าใจได้ถ้าไม่ขอโทษฉันไม่ใช่คนอังกฤษ


1
"แล้วใส่ตัวแปรทั้งหมดไว้ข้างหน้าจุด 1 จุดนั้นไปข้างหลัง" - และนั่นไม่จำเป็นต้องมีการกำหนดจำนวนมากในการเลื่อนข้อมูลหรือ? (สมมติว่ามีการจัดเก็บข้อมูลต่อเนื่องกันไม่ใช่รายการที่เชื่อมโยง)
Mark K Cowan

@MarkKCowan ใช่นั่นคือสิ่งที่การเรียงลำดับการแทรกทำให้การมอบหมายต่อ 'จุด' ตามที่ผู้ใช้ด้านบนวางไว้ โดยพื้นฐานแล้วการเรียงลำดับการแทรกสามารถเขียนได้ด้วยการกำหนดหนึ่งงานในวงในในขณะที่ bubbleort มีการกำหนด 3 งานในวงใน
JSQuareD

9

ข้อได้เปรียบหลักของการเรียงเม็ดมีดคืออัลกอริทึมออนไลน์ คุณไม่จำเป็นต้องมีค่าทั้งหมดเมื่อเริ่มต้น สิ่งนี้อาจมีประโยชน์เมื่อต้องจัดการกับข้อมูลที่มาจากเครือข่ายหรือเซ็นเซอร์บางตัว

ฉันรู้สึกว่านี่จะเร็วกว่าn log(n)อัลกอริทึมทั่วไปอื่น ๆ เนื่องจากความซับซ้อนจะเป็นn*(n log(n))เช่นการอ่าน / การจัดเก็บแต่ละค่าจากสตรีม ( O(n)) แล้วเรียงลำดับค่าทั้งหมด ( O(n log(n))) ส่งผลให้O(n^2 log(n))

ในทางตรงกันข้ามการใช้ Insert Sort จำเป็นต้องO(n)อ่านค่าจากสตรีมและO(n)ใส่ค่าไปยังตำแหน่งที่ถูกต้องดังนั้นจึงเป็นO(n^2)เพียง ข้อดีอื่น ๆ คือคุณไม่จำเป็นต้องใช้บัฟเฟอร์ในการจัดเก็บค่าคุณจัดเรียงในปลายทางสุดท้าย


หากการส่งผ่านข้อมูลตามลำดับเป็นสิ่งอื่นที่ไม่ใช่แค่การสแกนอาร์เรย์คุณสามารถจัดเรียงข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น เช่นแทรกองค์ประกอบลงในต้นไม้ไบนารีเมื่อคุณได้รับ สิ่งนี้ช่วยให้คุณO(n log(n))ทำงานได้ทั้งหมดโดยมีคอลเล็กชันที่เรียงลำดับในทุกขั้นตอนไปพร้อมกัน (การส่งผ่านตามลำดับ ณ จุดใดก็ได้O(m)) หากคุณต้องการเพียงผลลัพธ์ที่เรียงลำดับในตอนท้าย แต่ต้องการซ้อนทับการคำนวณการเรียงลำดับกับเวลาในการถ่ายโอนข้อมูล Heap อาจจะดี (และใช้งานได้ในสถานที่เช่นการเรียงลำดับการแทรก)
Peter Cordes

อย่างไรก็ตามการเรียงลำดับฟองหรือการเรียงลำดับการแทรกไม่เหมาะสำหรับสิ่งนี้ที่มีขนาดปัญหาใหญ่พอสำหรับO(f(n))ระดับความซับซ้อนที่มีความสำคัญมากกว่ารายละเอียดการใช้งานและปัจจัยคงที่
Peter Cordes

การแก้ไข: กองไม่ดีสำหรับสิ่งนี้ การเรียงลำดับส่วนใหญ่ทำงานได้ดีเมื่อคุณลบองค์ประกอบตามลำดับซึ่งเป็นเหตุผลว่าทำไมการเติบโตจึงมีราคาถูกมาก เป้าหมายคือการทำงานส่วนใหญ่ให้เสร็จเมื่อถึงเวลาที่องค์ประกอบสุดท้ายมาถึง
Peter Cordes

อย่างไรก็ตามหากคุณไม่จำเป็นต้องดูแลอาร์เรย์ที่จัดเรียงไว้สำหรับการnแทรกจริงๆแล้วมันจะลดลงถึงขั้นตอนวิธีใดที่ดีที่สุดสำหรับการจัดเรียงอาร์เรย์ที่เกือบจะเรียงลำดับโดยที่มีองค์ประกอบที่ไม่ได้เรียงลำดับหนึ่งรายการที่ด้านบน O(n log(n))อัลกอริทึมการจัดเรียงจำนวนมากอยู่O(n)ในกรณีที่เกือบจะเรียงลำดับดังนั้นจึงไม่เป็นความจริงที่คุณจะต้องsum(M=1..n, O(M * log(M)) )ทำงาน แน่นอนว่าจะเป็นO(n^2 log(n))เช่นนั้น แต่ด้วยทางเลือกที่เหมาะสมของอัลกอริทึมพวกเขาจะO(n^2)ทำงานได้ทั้งหมด แม้ว่าการเรียงลำดับการแทรกจะมีประสิทธิภาพมากที่สุดสำหรับสิ่งนี้
Peter Cordes

7

Bubble Sort ไม่ได้ออนไลน์ (ไม่สามารถจัดเรียงสตรีมอินพุตโดยไม่รู้ว่าจะมีกี่รายการ) เนื่องจากไม่ได้ติดตามองค์ประกอบที่เรียงลำดับสูงสุดทั่วโลก เมื่อใส่รายการคุณจะต้องเริ่มการเดือดตั้งแต่ต้น


5

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


2

แม้ว่าทั้งสองประเภทจะเป็น O (N ^ 2) ค่าคงที่ที่ซ่อนอยู่มีขนาดเล็กกว่ามากในการเรียงลำดับการแทรกค่าคงที่ซ่อนหมายถึงจำนวนจริงของการดำเนินการดั้งเดิมที่ดำเนินการ

เมื่อการเรียงลำดับการแทรกมีเวลาทำงานที่ดีขึ้น?

  1. Array เกือบจะเรียงลำดับแล้วสังเกตได้ว่าการเรียงลำดับการแทรกจะดำเนินการน้อยกว่าในกรณีนี้มากกว่าการเรียงแบบฟอง
  2. อาร์เรย์มีขนาดค่อนข้างเล็ก: การจัดเรียงการแทรกคุณย้ายองค์ประกอบไปรอบ ๆ เพื่อใส่องค์ประกอบปัจจุบันสิ่งนี้จะดีกว่าการเรียงฟองหากมีจำนวนองค์ประกอบน้อย

สังเกตว่าการเรียงลำดับการแทรกไม่ได้ดีไปกว่าการเรียงลำดับฟองเสมอไปเพื่อให้ได้สิ่งที่ดีที่สุดของทั้งสองโลกคุณสามารถใช้การจัดเรียงการแทรกหากอาร์เรย์มีขนาดเล็กและอาจรวมการเรียงลำดับ (หรือการเรียงลำดับด่วน) สำหรับอาร์เรย์ที่ใหญ่ขึ้น


2
ถ้าจำนวนองค์ประกอบไม่มากการเรียงฟองจะดีกว่าอย่างไร ความเข้าใจของฉันคือไม่ว่าคุณจะเลื่อนใน IS หรือสลับใน BS จะขึ้นอยู่กับว่าองค์ประกอบที่เปรียบเทียบนั้นมากกว่า (IS) หรือเล็กกว่า (BS) และไม่ได้อยู่ที่ # ขององค์ประกอบ กรุณาแก้ไขฉันถ้าผิด
มุสตาฟา

1

จำนวนการแลกเปลี่ยนในการทำซ้ำแต่ละครั้ง

  • การเรียงลำดับการแทรกสามารถสลับได้สูงสุด 1 ครั้งในการวนซ้ำแต่ละครั้งแลกเปลี่ยนในแต่ละซ้ำ
  • Bubble-sort จะทำการแลกเปลี่ยน 0 ถึง n ในการทำซ้ำแต่ละครั้ง

การเข้าถึงและเปลี่ยนส่วนที่เรียงลำดับ

  • การเข้าถึงการเรียงลำดับการแทรก (และการเปลี่ยนแปลงเมื่อจำเป็น) ส่วนที่เรียงลำดับเพื่อค้นหาตำแหน่งที่ถูกต้องของตัวเลขในการพิจารณา
  • เมื่อปรับให้เหมาะสม Bubble-sort จะไม่เข้าถึงสิ่งที่เรียงลำดับแล้ว

ออนไลน์หรือไม่

  • การเรียงลำดับการแทรกออนไลน์อยู่ นั่นหมายความว่าการเรียงลำดับการแทรกจะรับอินพุตทีละรายการก่อนที่จะวางในตำแหน่งที่เหมาะสม ไม่จำเป็นต้องเปรียบเทียบเท่านั้นadjacent-inputsมันไม่ได้มีการเปรียบเทียบเท่านั้น
  • Bubble-sort ไม่ออนไลน์ ไม่ทำงานหนึ่งอินพุตในแต่ละครั้ง จัดการกลุ่มของอินพุต (ถ้าไม่ใช่ทั้งหมด) ในการวนซ้ำแต่ละครั้ง Bubble-sort จะเปรียบเทียบและสลับadjacent-inputsในการวนซ้ำแต่ละครั้งเท่านั้น

0

การเรียงฟองแทบจะไม่มีประโยชน์ในทุกสถานการณ์ ในกรณีการใช้งานเมื่อการเรียงลำดับการแทรกอาจมีการแลกเปลี่ยนมากเกินไปสามารถใช้การเรียงลำดับการเลือกได้เนื่องจากรับประกันการแลกเปลี่ยนน้อยกว่า N ครั้ง เนื่องจากการเรียงลำดับการเลือกดีกว่าการจัดเรียงแบบฟองจึงไม่มีกรณีการใช้งาน


0

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

1. ในการสลับการเรียงลำดับการแทรกไม่จำเป็นต้องใช้

2. ความซับซ้อนของเวลาในการเรียงลำดับการแทรกคือΩ (n) สำหรับกรณีที่ดีที่สุดและกรณีที่เลวร้ายที่สุด O (n ^ 2)

3. ไม่มีความซับซ้อนเมื่อเทียบกับการเรียงฟอง

4. ตัวอย่าง: ใส่หนังสือในห้องสมุดจัดเรียงการ์ด

การจัดเรียงฟอง: 1. ต้องมีการสลับในการจัดเรียงฟอง

2. ความซับซ้อนของเวลาในการเรียงฟองคือΩ (n) สำหรับกรณีที่ดีที่สุดและกรณีที่เลวร้ายที่สุด O (n ^ 2)

3. ซับซ้อนมากขึ้นเมื่อเทียบกับการเรียงลำดับการแทรก


1
ทำไมไม่จำเป็นต้องทำการแลกเปลี่ยน? มันสลับองค์ประกอบเพื่อวางองค์ประกอบในตำแหน่งที่ถูกต้อง และฉันจะไม่บอกว่าการเรียงฟองนั้นซับซ้อนกว่านี้
พาร์เซกเกอร์

-1

การเรียงลำดับการแทรกสามารถกลับมาเป็น " มองหาองค์ประกอบที่ควรอยู่ในตำแหน่งแรก (ต่ำสุด) สร้างช่องว่างโดยเลื่อนองค์ประกอบถัดไปและวางไว้ที่ตำแหน่งแรกดีตอนนี้ดูองค์ประกอบซึ่งควรอยู่ที่ 2 ... "ไปเรื่อย ๆ ...

การจัดเรียงบับเบิ้ลจะทำงานแตกต่างกันซึ่งสามารถกลับมาทำงานต่อได้โดย " ตราบใดที่ฉันพบสององค์ประกอบที่อยู่ติดกันซึ่งเรียงลำดับไม่ถูกต้องฉันก็สลับมัน "


นั่นช่วยในการเรียงลำดับการแทรก แต่คำอธิบายของคุณเกี่ยวกับการเรียงลำดับฟองไม่รวมลูปจริงดังนั้นฉันจึงไม่สามารถเปรียบเทียบได้ การเรียงลำดับการแทรกฉันมีกฎอย่างมีประสิทธิภาพตราบใดที่ฉันพบสององค์ประกอบที่อยู่ติดกันซึ่งอยู่ในลำดับที่ไม่ถูกต้องฉันก็สลับมันเป็นวิธีที่ลูปทำงานที่แตกต่างกัน
Migwell

3
การเรียงลำดับการเลือกไม่ใช่เหรอ
harold
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.