สร้างฟังก์ชั่นหรือโปรแกรมที่รับสองอินพุต:
- รายการจำนวนเต็มที่จะเรียงลำดับ (น้อยกว่า 20 องค์ประกอบ)
- จำนวนเต็มบวก
N
บอกจำนวนการเปรียบเทียบที่คุณควรทำ
ฟังก์ชั่นจะหยุดและส่งออกรายการผลลัพธ์ของจำนวนเต็มหลังจากN
การเปรียบเทียบ หากรายการถูกเรียงลำดับอย่างสมบูรณ์ก่อนทำการN
เปรียบเทียบดังนั้นรายการที่เรียงควรถูกเอาท์พุท
ฟองเรียงลำดับขั้นตอนวิธีการเป็นที่รู้จักกันดีและผมคิดว่าคนส่วนใหญ่รู้ว่ามัน รหัสหลอกและภาพเคลื่อนไหวต่อไปนี้ (ทั้งจากบทความ Wikipedia ที่เชื่อมโยง) ควรให้รายละเอียดที่จำเป็น:
procedure bubbleSort( A : list of sortable items )
n = length(A)
repeat
swapped = false
for i = 1 to n-1 inclusive do
/* if this pair is out of order */
if A[i-1] > A[i] then
/* swap them and remember something changed */
swap( A[i-1], A[i] )
swapped = true
end if
end for
until not swapped
end procedure
ภาพเคลื่อนไหวด้านล่างแสดงความคืบหน้า:
ตัวอย่าง (นำมาโดยตรงจากบทความ Wikipedia ที่เชื่อมโยง) แสดงขั้นตอนเมื่อเรียงลำดับรายการ( 5 1 4 2 8 )
::
ผ่านก่อน
1: ( 5 1 4 2 8 ) -> ( 1 5 4 2 8 ) // Here, algorithm compares the first two elements,
// and swaps since 5 > 1.
2: ( 1 5 4 2 8 ) -> ( 1 4 5 2 8 ) // Swap since 5 > 4
3: ( 1 4 5 2 8 ) -> ( 1 4 2 5 8 ) // Swap since 5 > 2
4: ( 1 4 2 5 8 ) -> ( 1 4 2 5 8 ) // Now, since these elements are already in order
// (8 > 5), algorithm does not swap them.
รอบที่สอง
5: ( 1 4 2 5 8 ) -> ( 1 4 2 5 8 )
6: ( 1 4 2 5 8 ) -> ( 1 2 4 5 8 ) // Swap since 4 > 2
7: ( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
8: ( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
ตอนนี้อาร์เรย์ถูกเรียงลำดับแล้ว แต่อัลกอริทึมไม่ทราบว่ามันเสร็จสมบูรณ์หรือไม่ อัลกอริทึมนั้นต้องการหนึ่งรอบทั้งหมดโดยไม่มีการสลับใด ๆ เพื่อให้รู้ว่ามันถูกจัดเรียงแล้ว
รอบที่สาม
9: ( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
10:( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
11:( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
12:( 1 2 4 5 8 ) -> ( 1 2 4 5 8 )
กรณีทดสอบ:
รูปแบบ: Number of comparisons (N): List after N comparisons
Input list:
5 1 4 2 8
Test cases:
1: 1 5 4 2 8
2: 1 4 5 2 8
3: 1 4 2 5 8
4: 1 4 2 5 8
5: 1 4 2 5 8
6: 1 2 4 5 8
10: 1 2 4 5 8
14: 1 2 4 5 8
Input list:
0: 15 18 -6 18 9 -7 -1 7 19 19 -5 20 19 5 15 -5 3 18 14 19
Test cases:
1: 15 18 -6 18 9 -7 -1 7 19 19 -5 20 19 5 15 -5 3 18 14 19
21: -6 15 18 9 -7 -1 7 18 19 -5 19 19 5 15 -5 3 18 14 19 20
41: -6 9 -7 15 -1 7 18 18 -5 19 19 5 15 -5 3 18 14 19 19 20
60: -6 -7 -1 9 7 15 18 -5 18 19 5 15 -5 3 18 14 19 19 19 20
61: -6 -7 -1 7 9 15 18 -5 18 19 5 15 -5 3 18 14 19 19 19 20
81: -7 -6 -1 7 9 15 -5 18 18 5 15 -5 3 18 14 19 19 19 19 20
119: -7 -6 -1 -5 7 9 15 5 15 -5 3 18 14 18 18 19 19 19 19 20
120: -7 -6 -1 -5 7 9 15 5 15 -5 3 18 14 18 18 19 19 19 19 20
121: -7 -6 -1 -5 7 9 5 15 15 -5 3 18 14 18 18 19 19 19 19 20
122: -7 -6 -1 -5 7 9 5 15 15 -5 3 18 14 18 18 19 19 19 19 20
123: -7 -6 -1 -5 7 9 5 15 -5 15 3 18 14 18 18 19 19 19 19 20
201: -7 -6 -5 -1 -5 3 5 7 9 14 15 15 18 18 18 19 19 19 19 20
221: -7 -6 -5 -5 -1 3 5 7 9 14 15 15 18 18 18 19 19 19 19 20
- ใช่อนุญาตให้ใช้อัลกอริทึมการเรียงลำดับฟองในตัว
- ไม่คุณไม่สามารถเดาได้ว่าเป็นจำนวนเต็มบวกเท่านั้นหรือจำนวนเต็มเฉพาะ
- การเรียงลำดับต้องเป็นไปตามลำดับที่อธิบายไว้ข้างต้น คุณไม่สามารถเริ่มในตอนท้ายของรายการ