ตัวอย่าง Golang Sort Slice

Tawxyang Golang Sort Slice



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

ตัวอย่างที่ 1: Golang Sort Slice จากน้อยไปหามาก

ฟังก์ชัน “sort.Slice()” เป็นฟังก์ชันที่สำคัญที่สุดใน Go ซึ่งจะจัดเรียงองค์ประกอบของชิ้นใหม่ตามลำดับจากน้อยไปมากหรือจากมากไปน้อย พิจารณาภาพประกอบต่อไปนี้ซึ่งแบ่งชิ้นส่วนตามลำดับจากน้อยไปหามาก:

บรรจุุภัณฑ์ หลัก
นำเข้า (
'เอฟเอ็มที'
'เรียงลำดับ'
)
ฟังก์ชั่น หลัก () {
แม้แต่ชิ้น := [] นานาชาติ { 10 , 2 , 8 , 4 , 0 , 6 }
เอฟเอ็มที . พิมพ์ ( 'ชิ้นไม่เรียง:' , แม้แต่ชิ้น )
เรียงลำดับ . ชิ้น ( แม้แต่ชิ้น , ฟังก์ชั่น ( ฉัน , เจ นานาชาติ ) บูล {
กลับ แม้แต่ชิ้น [ ฉัน ] < แม้แต่สไลซ์ [ เจ ]
})
เอฟเอ็มที . พิมพ์ ( 'ชิ้นเรียง:' , แม้แต่ชิ้น )
}

ที่จุดเริ่มต้นของฟังก์ชัน main() เรากำหนดส่วนของ evenSlice ด้วยค่า {10, 2, 8, 4, 0, 6} ชิ้นส่วนนี้แสดงถึงชุดของเลขคู่ที่ไม่ได้เรียงลำดับในตอนแรก ในการจัดเรียงชิ้น evenSlice จะใช้ฟังก์ชัน sort.Slice() กับชิ้นนั้น ภายในฟังก์ชัน sort.Slice() ฟังก์ชันการเรียงลำดับจะถูกจัดเตรียมไว้เป็นอาร์กิวเมนต์ ฟังก์ชันนี้กำหนดลำดับการจัดเรียงโดยการเปรียบเทียบองค์ประกอบทั้งสองของชิ้นที่ดัชนี “i” และ “j” ถ้า evenSlice[i] น้อยกว่า evenSlice[j] มันจะคืนค่าจริง มิฉะนั้นจะส่งกลับเท็จ ฟังก์ชัน sort.Slice() ใช้ฟังก์ชันการเปรียบเทียบนี้เพื่อจัดเรียงองค์ประกอบของชิ้น “evenSlice” ใหม่ตามลำดับจากน้อยไปหามาก







ผลลัพธ์ของชิ้นส่วนที่เรียงลำดับจากน้อยไปหามากจะถูกสร้างขึ้นในหน้าจอผลลัพธ์ต่อไปนี้:





ตัวอย่างที่ 2: Golang Sort Part Slice

ถัดไป การเรียงลำดับจะใช้กับส่วนย่อยของส่วนที่ระบุในลำดับจากน้อยไปมากโดยใช้ฟังก์ชัน sort.Slice() ใน Go





บรรจุุภัณฑ์ หลัก
นำเข้า (
'เอฟเอ็มที'
'เรียงลำดับ'
)
ฟังก์ชั่น หลัก () {
:= [] นานาชาติ { 9 , 7 , 3 , 5 }
เริ่ม := 0
จบ := 3
เรียงลำดับ . ชิ้น ( [ เริ่ม : จบ ] ฟังก์ชั่น ( ฉัน , เจ นานาชาติ ) บูล {
กลับ [ เริ่ม + ฉัน ] < น [ เริ่ม + เจ ]
})
เอฟเอ็มที . พิมพ์ ( )
}

เริ่มแรก เราสร้างส่วน 'n' ด้วยค่า [9, 7, 3, 5] นอกจากนี้ ตัวแปรสองตัว 'เริ่มต้น' และ 'สิ้นสุด' ถูกตั้งค่าเป็น 0 และ 3 ตามลำดับ ตัวแปรเหล่านี้กำหนดช่วงของดัชนีในส่วน 'n' ที่จะถูกจัดเรียง ฟังก์ชัน “sort.Slice()” จะถูกเรียกใช้โดยมีตัวแบ่งย่อย “n[start:end]” เป็นอาร์กิวเมนต์แรก ส่วนย่อยนี้มีองค์ประกอบของ 'n' ภายในช่วงที่ระบุ หลังจากนั้น ฟังก์ชันการเรียงลำดับจะได้รับเป็นอาร์กิวเมนต์ที่สองภายในฟังก์ชัน sort.Slice()

ที่นี่ ฟังก์ชันนั้นได้รับดัชนีสองตัว 'i' และ 'j' ซึ่งแสดงถึงองค์ประกอบภายในส่วนย่อย ในการเปรียบเทียบองค์ประกอบภายในส่วนย่อย ฟังก์ชันการเรียงลำดับจะเข้าถึงองค์ประกอบที่เกี่ยวข้องในส่วนดั้งเดิมโดยใช้การเริ่มต้น offset โดยจะเปรียบเทียบ n[start+i] และ n[start+j] ถัดไป ฟังก์ชัน sort.Slice() ใช้ฟังก์ชันการเรียงลำดับที่มีให้เพื่อจัดเรียงองค์ประกอบใหม่ภายในส่วนย่อยตามลำดับจากน้อยไปหามาก



เอาต์พุตต่อไปนี้แสดงว่าองค์ประกอบภายในช่วงที่ระบุ (เริ่มต้นถึงจุดสิ้นสุด-1) ถูกจัดเรียง และองค์ประกอบที่อยู่นอกช่วงยังคงไม่เปลี่ยนแปลง:

ตัวอย่างที่ 3: Golang จัดเรียง Integer Slice โดยใช้ฟังก์ชัน Sort.Ints()

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

บรรจุุภัณฑ์ หลัก
นำเข้า (
'เอฟเอ็มที'
'เรียงลำดับ'
)
ฟังก์ชั่น หลัก () {
IntSlice := [] นานาชาติ { 10 , 13 , สิบห้า , สิบเอ็ด , 14 , 12 }
เอฟเอ็มที . พิมพ์ ( 'ชิ้นไม่เรียง:' , IntSlice )
เรียงลำดับ . อินท์ ( IntSlice )
เอฟเอ็มที . พิมพ์ ( 'ชิ้นเรียง:' , IntSlice )
}

ขั้นแรก เราประกาศและเริ่มต้นส่วน “IntSlice” ด้วยค่า [10, 13, 15, 11, 14, 12] ซึ่งแสดงถึงกลุ่มของจำนวนเต็มที่ไม่เรียงลำดับในตอนแรก จากนั้น ฟังก์ชัน sort.Ints() จะถูกเรียกใช้โดยมีชิ้น “IntSlice” เป็นอาร์กิวเมนต์เพื่อจัดเรียง “IntSlice” ฟังก์ชัน sort.Ints() ในกรณีนี้จะจัดเรียงทุกส่วนของสไลซ์ภายในตามอัลกอริทึมการเรียงลำดับที่ปรับให้เหมาะสม มันแก้ไขชิ้นส่วนดั้งเดิมโดยตรง จัดเรียงองค์ประกอบใหม่ตามลำดับการจัดเรียง

อันดับแรก เอาต์พุตต่อไปนี้แสดงว่าชิ้นที่ไม่ได้เรียงจะแสดงก่อน ตามด้วยชิ้นที่เรียง:

ตัวอย่างที่ 4: Golang Sort String Slice

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

บรรจุุภัณฑ์ หลัก
นำเข้า (
'เอฟเอ็มที'
'เรียงลำดับ'
)
ฟังก์ชั่น หลัก () {
strSl := [] สตริง { 'โกลัน' , 'หลาม' , 'ชวา' , 'เพิร์ล' , 'ตัวพิมพ์' }
เรียงลำดับ . สตริง ( strSl )
เอฟเอ็มที . พิมพ์ ( strSl )
}

ก่อนอื่นเราสร้างส่วน 'strSl' ด้วยค่า ['golang', 'python', 'java', 'perl', 'typescript'] ซึ่งไม่ได้เรียงลำดับ หลังจากนั้น เราจัดเรียงชิ้นส่วน “strSl” ด้วยฟังก์ชัน sort.Strings() ซึ่งจะจัดเรียงองค์ประกอบของชิ้นส่วนตามลำดับพจนานุกรม ฟังก์ชันนี้แก้ไขสไลซ์ต้นฉบับโดยตรง โดยจัดเรียงองค์ประกอบใหม่ตามลำดับการจัดเรียงตามค่า ASCII

เอาต์พุตจะเรียงลำดับส่วนสตริงในลักษณะจากน้อยไปมากตามที่แสดงในต่อไปนี้:

ตัวอย่างที่ 5: Golang ตรวจสอบ Sort Slice โดยใช้ฟังก์ชัน IntAreSort()

อย่างไรก็ตาม ด้วยฟังก์ชัน sort.IntsAreSorted() ของ Go เราสามารถตรวจสอบได้ว่าชิ้นส่วนของจำนวนเต็มนั้นเรียงลำดับจากน้อยไปหามากหรือไม่ พิจารณาตัวอย่างโปรแกรมต่อไปนี้ของฟังก์ชัน IntAreSort() สำหรับสไลซ์ที่กำหนด:

บรรจุุภัณฑ์ หลัก
นำเข้า (
'เอฟเอ็มที'
'เรียงลำดับ'
)
ฟังก์ชั่น หลัก () {
:= [] นานาชาติ { - 33 , 105 , - 42 , 59 , 18 , 0 , - 3 }
เอฟเอ็มที . พิมพ์ ( 'ชิ้น:' )
เอฟเอ็มที . พิมพ์ ( 'ชิ้นที่ไม่เรียง: ' , )
ผลลัพธ์ := เรียงลำดับ . IntsAreจัดเรียง ( )
เอฟเอ็มที . พิมพ์ ( ' \n ผลลัพธ์:' )
เอฟเอ็มที . พิมพ์ ( 'ได้รับ Slice เรียงลำดับหรือไม่: ' , ผลลัพธ์ )
}

ขั้นแรกให้กำหนดจำนวนเต็มสุ่มแบบไม่เรียงลำดับเป็น 'sl' ชิ้นส่วนนี้ประกอบด้วยชุดของจำนวนเต็มโดยไม่เรียงลำดับ ต่อไป เราเรียกฟังก์ชัน sort.IntsAreSorted() และส่งสไลซ์ “sl” เป็นอาร์กิวเมนต์ ฟังก์ชันนี้ให้ผลลัพธ์บูลีนที่ระบุว่าอินพุตของสไลซ์ถูกจัดเรียงจากน้อยไปมากหรือไม่ จากนั้น ฟังก์ชัน fmt.Println() จะพิมพ์ผลลัพธ์ออกมาว่าสไลซ์ที่กำหนดนั้นเรียงลำดับหรือไม่ตามค่าบูลีนที่ส่งคืน

เอาต์พุตแสดงค่าเท็จสำหรับลำดับการจัดเรียงของจำนวนเต็มบางส่วนเนื่องจากไม่ได้เรียงลำดับ:

ตัวอย่างที่ 6: Golang Reverse Sort Slice

นอกจากนี้ การใช้ฟังก์ชัน sortReverse() และ sortStringSlice() จากแพ็คเกจ sort ใน Go เราสามารถย้อนกลับการเรียงลำดับส่วนของสตริงได้ โปรแกรมต่อไปนี้สาธิตการทำงานของฟังก์ชัน sort.Reverse()

บรรจุุภัณฑ์ หลัก
นำเข้า (
'เอฟเอ็มที'
'เรียงลำดับ'
)
ฟังก์ชั่น หลัก () {
สระสไลซ์ := [] สตริง { 'มันคือ' , 'ก' , 'ฉัน' , 'ใน' , 'ออ' }
เอฟเอ็มที . พิมพ์ ( 'ก่อนจัดเรียง :' , สระสไลซ์ )
เรียงลำดับ . เรียงลำดับ ( เรียงลำดับ . ย้อนกลับ ( เรียงลำดับ . สตริงสไลซ์ ( สระสไลซ์ )))
เอฟเอ็มที . พิมพ์ ( 'หลังการจัดเรียง :' , สระสไลซ์ )
}

เราเริ่มต้นด้วยการกำหนดส่วนของสตริง “vowelSlice” ที่มีสระ “e”, “a”, “i”, “u” และ “o” เนื้อหาเริ่มต้นของสตริงที่ระบุจะถูกพิมพ์ก่อนโดยใช้ฟังก์ชัน 'พิมพ์' ถัดไป ดำเนินการเรียงลำดับโดยใช้ฟังก์ชัน sort.Sort() โดยมีฟังก์ชัน sort.Reverse() และ sort.StringSlice() เป็นอาร์กิวเมนต์ ที่นี่ 'sort.Reverse()' สร้างประเภทใหม่ที่กลับลำดับขององค์ประกอบ ใช้ประเภท 'sort.StringSlice' เป็นอาร์กิวเมนต์ซึ่งจะแปลง vowelSlice เป็นประเภทที่เรียงลำดับได้

ผลลัพธ์ที่นี่แสดงสระตามลำดับตัวอักษรย้อนกลับ:

บทสรุป

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