24
บทที13 การเรียงข้อมูล (Sorting) การเรียงลาดับข้อมูลเป็นการจัดการข้อมูลที่กระทากันมากในงานประยุกต์ต่างๆ มากมาย ยกตัวอย่าง เช่น การนาข้อมูลนักศึกษามาจัดเรียงลาดับตามรหัสนักศึกษา เพื่อนาไปใช้ในการพิมพ์ใบเซ็นชื่อเข้าสอบ หรือ การเรียงข้อมูลพนักงานตามรหัสของพนักงานเพื่อใช้ในการพิมพ์สลิปเงินเดือน เป็นต้น ถ้ากาหนดให้ A เป็นลิสท์ขนาด n อิลิเมนต์ มี A 1 , A 2 , A 3 , … A n เก็บอยู่ในหน่วยความจา การจัดเรียง ข้อมูลจะสามารถทาได้ n! แบบ แต่โดยทั่วไปการจัดเรียงข้อมูลที่นิยมคือ การจัดเรียงลาดับข้อมูลจากน้อยไป มาก หรือจากมากไปหาน้อย เท่านั้น ซึ่งจะเลือกใช้อัลกอริทึ่มใดในการเรียงลาดับนั้น ขึ้นอยู่กับลักษณะของ ข้อมูลได้แก่ ขนาดข้อมูล และประสิทธิภาพการจัดเรียงของแต่ละอัลกอริทึ่มเมื่อเทียบกับปริมาณข้อมูล ประเภทของการจัดเรียงลาดับข้อมูล การจัดเรียงลาดับข้อมูลในระบบคอมพิวเตอร์ สามารถแบ่งออกได้เป็น 2 ประเภทใหญ่ๆ คือ 1. การจัดเรียงลาดับภายใน (Internal Sorting) เป็นการจัดเรียงลาดับข้อมูลที่เก็บอยู่ใน หน่วยความจา โดยข้อมูลเหล่านี้จะถูกเก็บอยู่ในโครงสร้างข้อมูลแบบอาร์เรย์ หรือลิงค์ลิสท์ ข้อมูลที่ทาการ เรียงลาดับมีขนาดเล็กหรือจานวนไม่มากซึ่งหน่วยความจาสามารถจะอ่านข้อมูลทั้งหมดขึ้นมาบนหน่วยความจา และสามารถทางานต่างๆ บนหน่วยความจาได้โดยไม่ต้องอาศัยสื่อบันทึกข้อมูล เช่น ดิสก์ หรือ เทป มาช่วยใน การทางาน ประสิทธิภาพของการจัดเรียงในลักษณะนี้ เน้นที่การสลับหรือเคลื่อนย้ายข้อมูลให้น้อยที่สุด จะทา ให้ความเร็วของโปรแกรมดีขึ้น 2. การจัดเรียงลาดับภายนอก (External Sorting) เป็นการจัดเรียงลาดับข้อมูลที่เก็บอยู่ในสื่อ บันทึกข้อมูล โดยทั่วไปข้อมูลที่บันทึกนี้ มักมีจานวนมากจนไม่สามารถจะเก็บเอาไว้ในหน่วยความจาได้ทั้งหมด ต้องแบ่งออกเป็นส่วนย่อยๆ แล้วจึงนามาจัดเรียงในหน่วยความจา จากนั้นจึงทาการบันทึกกลับลงไปในสื่อ สาหรับบันทึกข้อมูลเป็นส่วนๆ ต่อจากนั้นนาส่วนต่างๆ ที่จัดเรียงลาดับเรียบร้อยแล้วมาทาการรวมเข้าด้วยกัน (Merge) สาหรับการเรียงแบบภายนอกนั้น จะต้องคิดถึงเวลาที่สูญเสียไปอันเนื่องจากการถ่ายเทข้อมูลระหว่าง เทปหรือดิสก์ กับหน่วยความจาหลักด้วย เวลาที่สูญเสียไปในการถ่ายเทข้อมูลระหว่างหน่วยความจาหลักกับ เทป หรือดิสก์จะเป็นตัวระบุความดีเลวของแบบการคานวณแบบเรียงภายนอก รูปแบบในการจัดเรียงข้อมูล 1) การจัดเรียงข้อมูลแบบ Bubble Sort เป็นการจัดเรียงลาดับข้อมูลประเภท Internal sorting โดยใช้การเปรียบเทียบคีย์ในตาแหน่งที่อยูติดกันทีละคู่ ถ้าคีย์ที่เปรียบเทียบไม่อยู่ในตาแหน่งที่ต้องการแล้วให้ทาการสลับที่กันระหว่างข้อมูล 2 ตัวนั้น ทา เช่นนี้จนกระทั่งเปรียบเทียบครบทุกตัว ซึ่งคือ N-1 ครั้ง ทิศทางการทางานอาจจะทาจากคู่ซ้ายไปขวา หรือคูขวาไปซ้าย หรือคู่บนลงล่าง หรือคู่ล่างขึ้นบน ก็ไดในแต่ละรอบของการเปรียบเทียบ คีย์ที่มีค่ามากจะถูกสลับที่ไปอยู่ในตาแหน่งตอนท้าย หรือคีย์ที่มีค่า น้อยจะถูกสลับไปอยู่ในตาแหน่งตอนบน สาหรับตัวอย่างนี้จะเริ่มเปรียบเทียบข้อมูลคู่ท้ายก่อน โดยให้ข้อมูลที่มี ค่ามากสลับไปอยู่ด้านท้ายของข้อมูล หรือข้อมูลที่มีค่าข้อมูลมากอยู่ทางด้านล่างของแถวนั่นเอง ดังตัวอย่าง ต่อไปนี

บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

บทท 13 การเรยงขอมล (Sorting)

การเรยงล าดบขอมลเปนการจดการขอมลทกระท ากนมากในงานประยกตตางๆ มากมาย ยกตวอยางเชน การน าขอมลนกศกษามาจดเรยงล าดบตามรหสนกศกษา เพอน าไปใชในการพมพใบเซนชอเขาสอบ หรอการเรยงขอมลพนกงานตามรหสของพนกงานเพอใชในการพมพสลปเงนเดอน เปนตน ถาก าหนดให A เปนลสทขนาด n อลเมนต ม A1, A2, A3, … An เกบอยในหนวยความจ า การจดเรยงขอมลจะสามารถท าได n! แบบ แตโดยทวไปการจดเรยงขอมลทนยมคอ การจดเรยงล าดบขอมลจากนอยไปมาก หรอจากมากไปหานอย เทานน ซงจะเลอกใชอลกอรทมใดในการเรยงล าดบนน ขนอยกบลกษณะของขอมลไดแก ขนาดขอมล และประสทธภาพการจดเรยงของแตละอลกอรทมเมอเทยบกบปรมาณขอมล ประเภทของการจดเรยงล าดบขอมล การจดเรยงล าดบขอมลในระบบคอมพวเตอร สามารถแบงออกไดเปน 2 ประเภทใหญๆ คอ 1. การจดเรยงล าดบภายใน (Internal Sorting) เปนการจดเรยงล าดบขอมลทเกบอยในหนวยความจ า โดยขอมลเหลานจะถกเกบอยในโครงสรางขอมลแบบอารเรย หรอลงคลสท ขอมลทท าการเรยงล าดบมขนาดเลกหรอจ านวนไมมากซงหนวยความจ าสามารถจะอานขอมลทงหมดขนมาบนหนวยความจ า และสามารถท างานตางๆ บนหนวยความจ าไดโดยไมตองอาศยสอบนทกขอมล เชน ดสก หรอ เทป มาชวยในการท างาน ประสทธภาพของการจดเรยงในลกษณะน เนนทการสลบหรอเคลอนยายขอมลใหนอยทสด จะท าใหความเรวของโปรแกรมดขน 2. การจดเรยงล าดบภายนอก (External Sorting) เปนการจดเรยงล าดบขอมลทเกบอยในสอบนทกขอมล โดยทวไปขอมลทบนทกน มกมจ านวนมากจนไมสามารถจะเกบเอาไวในหนวยความจ าไดทงหมด ตองแบงออกเปนสวนยอยๆ แลวจงน ามาจดเรยงในหนวยความจ า จากนนจงท าการบนทกกลบลงไปในสอส าหรบบนทกขอมลเปนสวนๆ ตอจากนนน าสวนตางๆ ทจดเรยงล าดบเรยบรอยแลวมาท าการรวมเขาดวยกน (Merge) ส าหรบการเรยงแบบภายนอกนน จะตองคดถงเวลาทสญเสยไปอนเนองจากการถายเทขอมลระหวางเทปหรอดสก กบหนวยความจ าหลกดวย เวลาทสญเสยไปในการถายเทขอมลระหวางหนวยความจ าหลกกบเทป หรอดสกจะเปนตวระบความดเลวของแบบการค านวณแบบเรยงภายนอก รปแบบในการจดเรยงขอมล

1) การจดเรยงขอมลแบบ Bubble Sort เปนการจดเรยงล าดบขอมลประเภท Internal sorting โดยใชการเปรยบเทยบคยในต าแหนงทอยตดกนทละค ถาคยทเปรยบเทยบไมอยในต าแหนงทตองการแลวใหท าการสลบทกนระหวางขอมล 2 ตวนน ท าเชนนจนกระทงเปรยบเทยบครบทกตว ซงคอ N-1 ครง ทศทางการท างานอาจจะท าจากคซายไปขวา หรอคขวาไปซาย หรอคบนลงลาง หรอคลางขนบน กได ในแตละรอบของการเปรยบเทยบ คยทมคามากจะถกสลบทไปอยในต าแหนงตอนทาย หรอคยทมคานอยจะถกสลบไปอยในต าแหนงตอนบน ส าหรบตวอยางนจะเรมเปรยบเทยบขอมลคทายกอน โดยใหขอมลทมคามากสลบไปอยดานทายของขอมล หรอขอมลทมคาขอมลมากอยทางดานลางของแถวนนเอง ดงตวอยางตอไปน

Page 2: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

2

Unsorted รอบท 1 เปรยบเทยบทงหมด 9 ครง รอบท 2 เปรยบเทยบทงหมด 8 ครง

36 36 36 36 36 36 36 36 36 5 5 5 5 5 5 5 5 5 27 27 27 27 27 27 27 27 5 36 36 36 36 36 36 36 36 9 23 23 23 23 23 23 23 5 27 27 27 27 27 27 27 27 9 36 33 33 33 33 33 33 5 23 23 23 23 23 23 23 23 9 27 27 32 32 32 32 32 5 33 33 33 33 33 33 33 33 9 23 23 23 18 18 18 18 5 32 32 32 32 32 32 32 32 9 33 33 33 33 5 5 5 5 18 18 18 18 18 18 18 18 9 32 32 32 32 32 13 13 9 9 9 9 9 9 9 9 9 9 18 18 18 18 18 18 9 9 13 13 13 13 13 13 13 13 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 13 13 13 13 13 13 13 13

รอบท 3 เปรยบเทยบ 7 ครง รอบท 4 เปรยบเทยบ 6 ครง รอบท 5 = 5 ครง

5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 9

36 36 36 36 36 36 36 10 10 10 10 10 10 10 10

10 10 10 10

27 27 27 27 27 27 10 36 36 36 36 36 36 13 13

13 13 13 13

23 23 23 23 23 10 27 27 27 27 27 27 13 36 36

36 36 36 18

33 33 33 10 23 23 23 23 23 23 23 13 27 27 27

27 27 18 36

32 32 32 10 33 33 33 33 33 33 13 23 23 23 23

23 18 27 27

18 18 10 32 32 32 32 32 32 13 33 33 33 33 33

18 23 23 23

10 10 18 18 18 18 18 18 13 32 32 32 32 32 18

33 33 33 33

13 13 13 13 13 13 13 13 18 18 18 18 18 18 32

32 32 32 32

Page 3: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

3

รอบท 6 = 4 ครง รอบท 7 = 3 8 = 2 9 = 1 5 5 5 5 5 5 5 5 5 5 5 9 9 9 9 9 9 9 9 9 9 9

10 10 10 10 10 10 10 10 10

10 10

13 13 13 13 13 13 13 13 13

13 13

18 18 18 18 18 18 18 18 18

18 18

36 36 36 36 23 23 23 23 23

23 23

27 27 27 23 36 36 27 27 27

27 27

23 23 23 27 27 27 36 36 36

32 32

33 32 32 32 32 32 32 32 32

36 33

32 33 33 33 33 33 33 33 33

33 36

จะเหนไดวาขอมลมการสลบทกนไปเรอยๆ จนไดขอมลทมการเรยงล าดบเปนทเรยบรอยแลว ซงมการจดเรยง n - 1 รอบ โดยในแตละรอบจะมการเปรยบเทยบคยเปน n - 1, n - 2, n - 3,….,3 ,2,1 ดงนน จ านวนการเปรยบเทยบทงหมดจะเปน 1+2+3+…+(n - 2) + (n - 1) = n(n - 1)/2 = (n 2 - n)/2 จากตวอยางเมอแทนในสตรจะได = (10 2 - 10)/2 = (100 - 10)/2 = 90/2 = 45 เมอพจารณาวธการจดเรยงแบบ Bubble Sort กรณทแยทสดในการจดเรยงจะเปนในกรณทมการสลบต าแหนงและการเปรยบเทยบในทกๆ ครงทมการเปรยบเทยบ ตวอยางฟงกชน bubble เพอใชในการจดเรยงขอมลในอารเรย data จากนอยไปหามาก void bubble(int n, int data[]) { int i, j, temp; for (i = 1; i< n; i++) { for (j = n-1; j >= i; j--) {

if (data[j] < data[j-1]) { temp = data[j]; data[j] = data[j-1];

Page 4: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

4

data[j-1] = temp; }

} } }

2) การจดเรยงล าดบขอมลแบบ Insertion Sort เปนการจดเรยงล าดบขอมลประเภท Internal sorting โดยไดเทคนคมาจากลกษณะการจดไพในมอของผเลน คอ เมอผเลนไดไพใบใหมเพมขนมา จะน าไพใบนนไปแทรกในต าแหนงทเหมาะสม ท าใหไพในมอบางสวนตองขยบต าแหนงออกไป ซงการจดเรยงล าดบขอมลแบบแทรกน จะเรมพจารณาคยในต าแหนงท 2 เปนตนไป โดยน าคยทพจารณาไปแทรกในต าแหนงทถกตอง และจะมผลใหคยในต าแหนงทอยหลงต าแหนงทแทรกขยบต าแหนงออกไปเรอยๆ จากวธการดงกลาว ถาการพจารณาคยมาถงต าแหนงท I จะเหนไดวาขอมลจะถกแบงออกเปนสองสวน คอ สวนแรกจะเปนสวนทถกจดเรยงล าดบตามคยแลว อกสวนจะเปนสวนทยงไมไดท าการจดเรยง ดงตวอยางตอไปน ขอมลเรมตน 44 33 11 55 77 90 40 60 99 22 88 66 เรมท าการเรยงขอมลโดยพจารณาขอมลในล าดบท 2 เปนตวแรก I = 2 : คยทท าการจดเรยงคอ 33 44 33 11 55 77 90 40 60 99 22 88 66 น าไปแทรกในต าแหนงท 1 จะได 33 44 11 55 77 90 40 60 99 22 88 66 I = 3 : คยทท าการจดเรยงคอ 11 33 44 11 55 77 90 40 60 99 22 88 66 น าไปแทรกในต าแหนงท 1 จะได 11 33 44 55 77 90 40 60 99 22 88 66 I = 4 : คยทท าการจดเรยงคอ 55 11 33 44 55 77 90 40 60 99 22 88 66 ไมมการน าไปแทรก จะได 11 33 44 55 77 90 40 60 99 22 88 66 I = 5 : คยทท าการจดเรยงคอ 77 11 33 44 55 77 90 40 60 99 22 88 66 ไมมการน าไปแทรก จะได 11 33 44 55 77 90 40 60 99 22 88 66 I = 6 : คยทท าการจดเรยงคอ 90 11 33 44 55 77 90 40 60 99 22 88 66 ไมมการน าไปแทรก จะได

Page 5: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

5

11 33 44 55 77 90 40 60 99 22 88 66 I = 7 : คยทท าการจดเรยงคอ 40 11 33 44 55 77 90 40 60 99 22 88 66 น าไปแทรกในต าแหนงท 3 จะได 11 33 40 44 55 77 90 60 99 22 88 66 I = 8 : คยทท าการจดเรยงคอ 60 11 33 40 44 55 77 90 60 99 22 88 66 น าไปแทรกในต าแหนงท 6 จะได 11 33 40 44 55 60 77 90 99 22 88 66 I = 9 : คยทท าการจดเรยงคอ 99 11 33 40 44 55 60 77 90 99 22 88 66 ไมมการน าไปแทรก จะได 11 33 40 44 55 60 77 90 99 22 88 66 I = 10 : คยทท าการจดเรยงคอ 22 11 33 40 44 55 60 77 90 99 22 88 66 น าไปแทรกในต าแหนงท 2 จะได 11 22 33 40 44 55 60 77 90 99 88 66 I = 11 : คยทท าการจดเรยงคอ 88 11 22 33 40 44 55 60 77 90 99 88 66 น าไปแทรกในต าแหนงท 9 จะได 11 22 33 40 44 55 60 77 88 90 99 66 I = 12 : คยทท าการจดเรยงคอ 66 11 22 33 40 44 55 60 77 88 90 99 66 น าไปแทรกในต าแหนงท 8 จะได 11 22 33 40 44 55 60 66 77 88 90 99 ตวอยางฟงกชน insertion เพอใชในการจดเรยงขอมลในอารเรย data จากนอยไปหามาก void insertion(int n, int data[]) { int i, j, temp; for (i = 1; i< n; i++) { temp = data[i]; j = i; while (temp < data[j-1] && j > 0) { data[j] = data[j-1]; j--; } data[j] = temp; } }

Page 6: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

6

การจดเรยงล าดบแบบแทรก จะมการจดเรยงล าดบขอมลทงหมด n - 1 รอบ แตมกใชเวลานอยกวาการจดเรยงแบบ Bubble ซงในการจดเรยงแตละรอบนน จ านวนการเปรยบเทยบคยจะไมแนนอน เพราะในแตละรอบการเปรยบเทยบจะสนสดเมอไมมการสลบต าแหนงของคย ดงนน จะพจารณาจ านวนการเปรยบเทยบคยเปน 3 กรณคอ

1. กรณดทสด ขอมลถกจดเรยงล าดบเรยบรอยแลว กรณนแตละรอบจะมการเปรยบเทยบคยเพยงครงเดยว เพราะฉะนนจ านวนการเปรยบเทยบคยคอ n - 1

2. กรณแยทสด ขอมลถกจดเรยงล าดบกลบกน คอ เรยงล าดบคาคยจากมากไปหานอย (ในกรณทตองการจดเรยงล าดบจากนอยไปหามาก) ในกรณนแตละรอบจะมการเปรยบเทยบคย เปนดงน รอบท 1 จ านวนการเปรยบเทยบทงหมดจะเปน 1 ครง รอบท 2 จ านวนการเปรยบเทยบทงหมดจะเปน 2 ครง รอบท 3 จ านวนการเปรยบเทยบทงหมดจะเปน 3 ครง . . . รอบท n - 2 จ านวนการเปรยบเทยบทงหมดจะเปน n - 2 ครง รอบท n - 1 จ านวนการเปรยบเทยบทงหมดจะเปน n - 1 ครง ดงนน จ านวนการเปรยบเทยบทงหมดจะเปน 1+2+3+…+(n-2)+(n-1 = n(n-1)/2 3. กรณเฉลย จ านวนการเปรยบเทยบคยทงหมด จะเฉลยจากจ านวนการเปรยบเทยบคยของกรณทดทสดและกรณทแยทสด ซงจะใหจ านวนการเปรยบเทยบคย จากการค านวณดงน ((n – 1) + (n(n – 1)/2))/2 = (n – 1 (n + 2)/4 = (n 2 + n - 2)/4

3) การจดเรยงขอมลแบบ Selection Sort เปนการจดเรยงล าดบขอมลประเภท Internal sorting ทงายทสด โดยเรมจาก

1. เลอกคาของขอมลทมคานอยทสด 2. น ามาแลกเปลยนกบคาในต าแหนงแรกสดของกลม A(1)

หลงจากนนกกระท าตามหลกการทง 2 กบขอมลทเหลอ คอในครงท 2 คา A(2) จะถกแลกเปลยนกบคาทเลอกแลววานอยทสดในลสท A(2)…A(N) และในครงท 3 คา A(3) จะถกแลกเปลยนกบคาทเลอกแลววานอยทสดในลสท A(3)…A(N) และเรอยไปจนกระทงเหลอขอมลทจะเปรยบเทยบแค 2 คาคอ A(N-1) และ A(N) ดงนน จ านวนรอบในการกระท าเปน n-1 รอบ

Page 7: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

7

ขอมลเดม 44 33 11 55 77 90 40 60 99 22 88 66

I = 1 44 33 11 55 77 90 40 60 99 22 88 66

I = 2 11 33 44 55 77 90 40 60 99 22 88 66

I = 3 11 22 44 55 77 90 40 60 99 33 88 66

I = 4 11 22 33 55 77 90 40 60 99 44 88 66

I = 5 11 22 33 40 77 90 50 60 99 44 88 66

I = 6 11 22 33 40 44 90 55 60 99 77 88 66

I = 7 11 22 33 40 44 55 90 60 99 77 88 66

I = 8 11 22 33 40 44 55 60 90 99 77 88 66

I = 9 11 22 33 40 44 55 60 66 99 77 88 90

I = 10 11 22 33 40 44 55 60 66 77 99 88 90

I = 11 11 22 33 40 44 55 60 66 77 88 99 90

I = 12 11 22 33 40 44 55 60 66 77 88 90 99

ตวอยางฟงกชน selection เพอใชในการจดเรยงขอมลในอารเรย data จากนอยไปหามาก void selection(int n, int data[]) { int i, j, temp, min; for (i = 0; i<= n-1; i++) { min = i; for (j = i+1; j < n; j++) {

if (data[j] < data[min]) min = j; } temp = data[i]; data[i] = data[min]; data[min] = temp; }

} ในกรณทมขอมล N ตว การเรยงล าดบขอมลแบบ Selection Sort จะมการคนหาทงหมด N - 1 ครง ซงโดยปกตแลวจะมประสทธภาพมากกวาแบบ Bubble และแบบ Insertion เพราะมการสลบทกนจรงไมเกน N – 1 ครง โดยในแตละรอบจะมการเปรยบเทยบคย ดงน รอบท 1 จ านวนการเปรยบเทยบทงหมดจะเปน n - 1 ครง รอบท 2 จ านวนการเปรยบเทยบทงหมดจะเปน n - 2 ครง รอบท 3 จ านวนการเปรยบเทยบทงหมดจะเปน n - 3 ครง

Page 8: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

8

. . . รอบท n - 2 จ านวนการเปรยบเทยบทงหมดจะเปน 2 ครง รอบท n - 1 จ านวนการเปรยบเทยบทงหมดจะเปน 1 ครง ดงนน จ านวนการเปรยบเทยบทงหมดจะเปน 1+2+3+…+(n-2)+(n-1 = n(n-1)/2 = (n 2 - n)/2

4) การจดเรยงล าดบขอมลแบบ Quick Sort เปนการจดเรยงล าดบขอมลประเภท Internal sorting ซงถกคดคนโดย C.A.R. Hoare มแนว ความคดในการจดเรยงล าดบคอ จะเลอกคยจากกลมขอมลขนมา 1 คา และใชคยนนเปนหลกในการแบงขอมลเปนสองสวน ซงผลของการแบงจะไดสวนหนงอยในต าแหนงตอนหนาและคยทอยในสวนนจะมคานอยกวาคยทเลอกสวนอกสวนหนงจะอยในต าแหนงตอนหลง และคยในสวนนจะมคามากกวาหรอเทากบคยทเลอก เมอแบงส าเรจแลว ใหน าแตละสวนไปแบงเปนสวนยอยในแบบเดยวกนตอไป และใหด าเนนการแบงสวนยอยตอไปในลกษณะเดยวกน จนกระทงทกสวนไมสามารถแบงออกเปนสวนยอยตอไปไดอก ส าหรบวธการแบงสวนเพอใหมคณสมบตดงกลาวมดวยกนหลายแบบ เชน เลอกคยทอยในต าแหนงแรก หรอคากลาง (medium) ของจ านวนขอมล แตในทนจะใชวธแรกคอ เลอกคยทอยในต าแหนงแรกของสวนทจะแบง สมมตวา X จากนนใหพจารณาคยจากต าแหนงตอนทายขนมาขางหนา จนกวาจะพบคยทมคานอยกวา X แลวใหสลบในต าแหนงนนกบ X ตอไปใหพจารณาคยจากต าแหนงตอนหนาไปขางหลง โดยเรมถดจากต าแหนงทเกดการสลบจนกวาจะพบคยทมคามากกวาหรอเทากบ X แลวใหสลบคยในต าแหนงนนกบ X ซงอยในต าแหนงใหมแลวจากนนไปพจารณาคยจากต าแหนงตอนทายขนมาขางหนาอก โดยเรมถดจากต าแหนงทเกดการสลบ และจะด าเนนการในลกษณะเดยวกนสลบกนไป จนการพจารณามาบรรจบกบต าแหนงของ X ในขณะนน การแบงสวนดวยวธดงกลาว คยถกหนอยจะถกสลบต าแหนงไปมา และเมอสนขบวนการคยทถกเลอกจะไปตกอยในต าแหนงทคยนนตองอยพอด ดงตวอยางตอไปน การเรยงขอมลจะเรมโดยใชตวช 2 ตว คอ F และ R โดยในครงแรกให F ชไปท 1 ซงกคอคยตวแรก และ R ชไปยงคยตวสดทายในลสท การเปรยบเทยบจะกระท าระหวางคาท ถกชโดย F และ R ดงตวอยาง สมมต A ประกอบดวยตวเลข 9 จ านวน และคยทถกเลอก คอ คยตวแรก 36 36 27 23 33 18 5 13 9 10

Page 9: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

9

รอบท 1 36 27 23 33 18 5 13 9 10 F R เรมเปรยบเทยบจากขวาไปซาย โดยเรมจากคาท R ชอย เพอหาตวเลขทมคานอยกวาคาคยหรอ ตวช F และ R ชไปทคยทเลอกไว ซงตอนน คาท R ชอย มคานอยกวาคาของคย (10 < 36) จงท าการสลบต าแหนงระหวาคาคยกบคาท R ชอย ซงจะไดลสทเปน 10 27 23 33 18 5 13 9 36 F R หลงจากนนเรมเปรยบเทยบจากซายไปขวา โดยเรมจากคาท F ชอย และเพมคา F ขนครงละ 1 โดยการเปรยบเทยบจะหยดเมอพบคยทมคามากกวา 36 หรอ ตวช F และ R ชไปทคยทเลอกไว 10 27 23 33 18 5 13 9 36 F R เปรยบเทยบ คาท F ชอย กบคาคย ซง 10 มคานอยกวา 36 จงเพมคา F ขนหนง 10 27 23 33 18 5 13 9 36 F R เปรยบเทยบ คาท F ชอย กบคาคย ซง 27 มคานอยกวา 36 จงเพมคา F ขนหนง 10 27 23 33 18 5 13 9 36 F R เปรยบเทยบ คาท F ชอย กบคาคย ซง 23 มคานอยกวา 36 จงเพมคา F ขนหนง 10 27 23 33 18 5 13 9 36 F R เปรยบเทยบ คาท F ชอย กบคาคย ซง 33 มคานอยกวา 36 จงเพมคา F ขนหนง 10 27 23 33 18 5 13 9 36 F R

เปรยบเทยบ คาท F ชอย กบคาคย ซง 18 มคานอยกวา 36 จงเพมคา F ขนหนง 10 27 23 33 18 5 13 9 36 F R

Page 10: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

10

เปรยบเทยบ คาท F ชอย กบคาคย ซง 5 มคานอยกวา 36 จงเพมคา F ขนหนง

10 27 23 33 18 5 13 9 36 F R เปรยบเทยบ คาท F ชอย กบคาคย ซง 13 มคานอยกวา 36 จงเพมคา F ขนหนง 10 27 23 33 18 5 13 9 36 F R

เปรยบเทยบ คาท F ชอย กบคาคย ซง 9 มคานอยกวา 36 จงเพมคา F ขนหนง 10 27 23 33 18 5 13 9 36 F R ซงในทนไมพบคาทมากกวาคย และทงตวช F และ R ชไปทคย หมายถงวา ตอนนขอมลทกตวไดถกเปรยบเทยบกบ 36 แลว ณ จดน คย 36 จะอยในต าแหนงทถกตอง และไดแบงลสทออกเปน 2 ลสทยอย คอ (10 27 23 33 18 5 13 9) กบ (36) การเรยงในรอบตอไปจะท ากบขอมลในแตละกลม การกระท าขนตอนซ าในแตละกลมยอยจะกระท าเมอมขอมลในกลมยอยตงแต 2 คาขนไป เนองจากเราจะท าไดครงละกลมเทานน จงจ าเปนตองมการเกบต าแหนงเรมตน กบต าแหนงสดทายของลสททยงไมไดถกเรยงเอาไว ซงจะตองใช สแตกชวย แตเนองจาก sublist ยอย (36) มคาเดยวจงไมตองน ามาเรยง ดงนนจงไมตองเกบต าแหนงเรมตนหรอต าแหนงสดทายไวในสแตก ซงในกรณนแสดงวาคา 36 อยในต าแหนงทถกตองแลว ปป รอบท 2 ในรอบนจะตองท าการเรยงขอมลใน sublist แรก โดยให F ชไปทต าแหนงแรกของ sublist และ R ชไปทต าแหนงสดทายของ sublist แลวปฏบตเหมอนในรอบแรก (10 27 23 33 18 5 13 9) (36) F R (9 27 23 33 18 5 13 10) (36) F R (9 10 23 33 18 5 13 27) (36) F R

Page 11: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

11

(9 10 23 33 18 5 13 27) (36)

F R

(9 5 23 33 18 10 13 27) (36) F R

(9 5 10 33 18 23 13 27) (36) F R

(9 5 10 33 18 23 13 27) (36) F R

(9 5 10 33 18 23 13 27) (36)

F R

(9 5 10 33 18 23 13 27) (36) F R จะได Sublist ยอย คอ

(9 5) (10) (33 18 23 13 27) (36) เนองจากม 2 sublist ยอย จะน าต าแหนงเรมตนกบต าแหนงสดทายของ sublist ชดหลงเกบไวในสแตกดงภาพ

Top

4 , 8

ปป รอบท 3

(9 5) (10) (33 18 23 13 27) (36) F R (5 9) (10) (33 18 23 13 27) (36)

F R

Page 12: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

12

จะได Sublist ยอย คอ (5) (9) (10) (33 18 23 13 27) (36)

รอบท 4 ในรอบนจะตองท าการ POP ต าแหนงเรมตนและต าแหนงสดทายของ sublist ทยงไมไดท าการเรยง ไดคา 5 และ 8 คอตองท าการเรยงขอมลในต าแหนงท 5 ถงต าแหนงท 8

(5) (9) (10) (33 18 23 13 27) (36) F R

(5) (9) (10) (27 18 23 13 33) (36) F R

(5) (9) (10) (27 18 23 13 33) (36) F R

(5) (9) (10) (27 18 23 13 33) (36) F R

(5) (9) (10) (27 18 23 13 33) (36) F R จะได Sublsit ยอย คอ

(5) (9) (10) (27 18 23 13) (33) (36) sublist 33 มคาเดยว แสดงวาอยในล าดบทถกตองแลว รอบท 5

(5) (9) (10) (27 18 23 13) (33) (36) F R

(5) (9) (10) (13 18 23 27) (33) (36)

F R (5) (9) (10) (13 18 23 27) (33) (36) F R

Page 13: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

13

(5) (9) (10) (13 18 23 27) (33) (36) F R จะได Subilist ยอย คอ

(5) (9) (10) (13 18 23) (27) (33) (36) รอบท 6

(5) (9) (10) (13 18 23) (27) (33) (36) F R

(5) (9) (10) (13 18 23) (27) (33) (36) F R

(5) (9) (10) (13 18 23) (27) (33) (36)

F R จะได Subilist ยอย คอ

(5) (9) (10) (13) (18 23) (27) (33) (36) รอบท 7

(5) (9) (10) (13) (18 23) (27) (33) (36) F R

(5) (9) (10) (13) (18 23) (27) (33) (36) F R จะไดผลลพธเปน

(5) (9) (10) (13) (18) (23) (27) (33) (36) void quicksort (int data[], int first , int last) { int key, lower, upper, temp; if (first < last) { key = first; lower = first; upper = last;

Page 14: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

14

while (lower < upper) { while (data[upper] >= data[key] && upper > lower){ upper--; } if (data [key] > data [upper] && upper > lower) temp = data[key]; data[key] = data[upper]; data[upper] = temp; key = upper; } while (data[lower] <= data[key] && upper > lower) { lower++; } if (data[lower] > data[key] and upper > lower) { temp = data[key]; data[key] = data[lower]; data[lower] = temp; key = lower; } } If (first < upper – 1) quicksort(data, first, upper – 1); if (upper+1 < last) quicksort(data, upper+1, last); } }

5) การจดเรยงล าดบขอมลแบบ Radix Sort การจดเรยงล าดบแบบนมกนยมใชกบขอมลทมปรมาณมาก ซงในการจดเรยงนนจะไมพจารณาคาทแทจรงของคย แตจะแยกพจารณาคยออกเปนทละหลก โดยจะเรมพจารณาในหลกสดทายกอน รอบตอไปจะพจารณาหลกถดขนไป เชน ถาคยทท าการจดเรยงล าดบขอมลเปนจ านวนเตม ในรอบแรกจะพจารณาหลกหนวย รอบทสองจะพจารณาหลกสบ เปนตน ดงนนการจดเรยงแบบน จ านวนรอบของการจดเรยงจะเทากบจ านวนหลกของคย วธการจดเรยง จะอานขอมลมาทละตวแลวพจารณาหลกสดทายของคยวาเปนอะไร และใหน าไปเกบเอาไวในทซงจดไวส าหรบคานนๆ เราเรยกททซงจดไวใหนวา บกเกต (Bucket) เชน หลกสดทายเปน 5 ใหน าคานไปเกบไวใน บกเกตส าหรบคาทเปน 5 เมออานขอมลหมดจะไดขอมลตางๆ แยกไปอยตามบกเกตตางๆ ซงจะมทงหมด 10 บกเกต ส าหรบขอมลทเปนตวเลข คอ ตงแต 0 ถง 9 จากนนใหอานขอมลจากบกเกตเรยงตามล าดบ ไปเกบไวในแถวล าดบเดม (อารเรย) ตามล าดบทอานจากบกเกต รอบ

Page 15: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

15

ตอไปด าเนนการแบบเดยวกน แตใหพจารณาหลกถดไปของคย การด าเนนการจะเปนเชนน จนกระทงการพจารณาถงหลกแรกของคย ดงตวอยางตวไปน 36 27 23 33 18 5 13 9 10 รอบท 1 กระจายคาคยไปตามบกเกตตางๆ โดยเปรยบเทยบจากคาของตวเลขในหลกทางขวาสด 36 27 23 33 18 5 13 9 10 บกเกตท 0 10 บกเกตท 1 บกเกตท 2 บกเกตท 3 23 33 13 บกเกตท 4 บกเกตท 5 5 บกเกตท 6 36 บกเกตท 7 27 บกเกตท 8 18 บกเกตท 9 9 เมออานคาของแตละบกเกต จะไดดงน 10 23 33 13 5 36 27 18 9 รอบท 2 กระจายคาคยไปตามบกเกตตาง ๆ โดยเปรยบเทยบจากคาของตวเลขในหลกถดมา 10 23 33 13 5 36 27 18 9 บกเกตท 0 5 9 บกเกตท 1 10 13 18 บกเกตท 2 33 13 บกเกตท 3 33 36 บกเกตท 4 บกเกตท 5 บกเกตท 6 บกเกตท 7 บกเกตท 8 บกเกตท 9 เมออานคาของแตละบกเกต จะไดดงน 5 9 10 13 18 23 27 33 36 การจดเรยงล าดบแบบ Radix อาจจะเรยกอกอยางวา การจดเรยงล าดบแบบบกเกต (Bucket Sort) โดยถาใชอารเรยแทนบกเกต ตองใชอารเรยเทากบจ านวนของบกเกต แตในแตละอารเรยจะมสมาชกเทากบจ านวนขอมลทจะท าการจดเรยง

Page 16: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

16

6) การเรยงล าดบแบบ shell sort

โดยปกตการเรยงขอมลแบบทใชการเปรยบเทยบประมาณ n log2n จะตองมกระบวนการและขนตอนทพสดารกวาการเรยงขอมลแบบทใชการเปรยบเทยบประมาณ n2 ครง แตถาจ านวนขอมลทตองเรยงมจ านวนนอย หรอเกอบจะเรยงกนอยแลว การท างานของแบบการค านวณแบบ n2 นนจะท างานไดดกวาการเรยงแบบ n log2n การเรยงทจะกลาวตอไปน จะใชแนวความคดจากเรองน นนคอแทนทจะเรยงขอมลทงชดโดยตรง เราจะแบงขอมลทงชดหรอคยทแทนขอมลเหลานออกเปนสวนยอย ๆ แลวเรยงสวนยอย ๆ เหลานนโดยใชอลกอรทม n2 เชน bubble sort หรอ insertion sort

จากชดคยทก าหนดใหเราจะไมแบงคยชดนนออกเปนลสตยอยจรง ๆ แตจะท าการแบงโดยก าหนดคาทจะอยในลสตยอย อนงแตละลสตยอยจะมคยอยประมาณ n/h คา จ านวนคยในลสตยอยในแตละเทยวทท าการเรยงจะไมเทากน แตจะถกก าหนดโดยคา h ตอไปน ht,h t - 1 ,…,h1 โดยทคา h1 = 1 เสมอ การเรยงจะสนสดเมอท าการเรยงเปนจ านวน t รอบ

การเลอกคา hi วธการเลอกคา hi มอยหลายแบบ สวนแบบทจะกลาวถงในทนม 2 แบบ คอ (1) ใหเลอก h i = 2 i - 1โดยทคา i อยระหวางคา 1 และ (log2n) ถาเลอก hi โดยวธน จ านวนครงท

ตองมการเปรยบเทยบคย จะเปน O(n 3/2) ซงเปนกรณเลวรายทสด (2) ชดคา hi ทใชไดดอกแบบหนงก าหนดโดยสมการ hi = (3 i - 1)/ 2 ส าหรบคาi อยระหวาง 1 และ

t โดยท t เปนคาจ านวนเตมนอยทสดทสอดคลองกบอสมการ h t - 1 ณ n ตวอยาง ใหชดคยทจะเรยงมดงน (37,32,14,45,92,18,34,31,35) เราจะเลอกคา hi จากแบบ(1) ทกลาวมาแลว เนองจาก n = 10 เราจะไดวา (log210) = 3 ดงนนคา i ทใชคอ 3,2,1 และจะได h3 = 7, h2 = 3, h1 = 1 ตามล าดบ จากสมการ h i = 2 i - 1

การเรยงรอบท 1 จะม 3 ลสตยอย ดงทแสดงโดยเสนทโยงไว 3 ลสตยอยนคอ (37,34)(32,31)(14,35) หลงจากการเรยงแตละลสตยอยแลวจะไดชดตวเลขดงน

Page 17: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

17

การเรยงรอบท 2 จะประกอบดวย 3 ลสตยอย คอ (34,45,19,37) (31,92,32) (14,18,35) หลงจากการเรยงแตละลสตยอยแลวจะได

19 31 14 34 37 18 35 92 32 45

การเรยงรอบท 3 จะประกอบดวยลสตเพยงลสตเดยว นนคอทกคาในลสตน การเรยงเทากบการใช insertion sort หรอการเรยงแบบอน ๆ

เมอเรยงแลวจะได 14 18 19 31 32 34 35 37 45 92

สงเกตดขอมลจากการเรยงโดยวธ shell น การเลอกคา hi อกแบบทมประโยชน (และงาย) กคอ ให hi = 1 แลวให h i +1 = 3h i +1 และใหหยดท h t เมอ h t +2 มคามากกวา n

การเรยงล าดบขอมลภายนอก (External Sort) การเรยงล าดบแบบภายในทไดกลาวในตอนทแลวนน ขอมลทจะเรยงจะตองอยพรอมกนในหนวยความจ า ดงนนจงไมเหมาะส าหรบการเรยงขอมลทมจ านวนมาก ในหวขอนจะกลาวถงการเรยงขอมลจ านวนมาก ทเราเรยกวา external sorting Subist 1 Merge List Subist 2 ถาแฟมทตองการเรยงล าดบมขนาด 2000 รายการ สมมตวาหนวยความจ าสามารถจขอมลไดเพยงครงละ 1000 รายการ วธแกปญหาวธหนงกคอ ท าการเรยงล าดบแบบภายใน 2 ครง ส าหรบรายการท

1001 - 2000

1 - 1000

MERGE

Page 18: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

18

1 - 1000 ครงหนง และรายการท 1001 - 2000 อกครงหนง จากนนจงน าแฟมยอยทเรยงแลวทง 2 นมาผสาน (merge) กน (แฟมยอยทผานการเรยงล าดบแลว เรยกวา รน) เทคนคการเรยงล าดบแบบภายนอกเกอบทกวธ ใชหลกการดงนคอ แบงรายการทจะเรยงล าดบออกเปนกลมยอย และจดการเรยงล าดบแบบภายในกบรายการกลมเหลานน โดยการเกบรายการกลมยอยเหลาน ในสภาพของแฟมล าดบ จากนนจงน าแฟมยอยเหลานมากท าการผสานเปนแฟมเดยวกน เทคนคของการเรยงล าดบแบบภายนอกอาจแตกตางกน ขนอยกบ

1. วธการเรยงล าดบแบบภายในทเลอกใช 2. การจดสรรเนอทหนวยความจ าส าหรบการเรยงล าดบแบบภายใน 3. การกระจายของ run ตาง ๆ ในอปกรณบนทกขอมล 4. จ านวน run ทใชในการผสานแตละรอบ

การประเมนผลการท างานของการเรยงล าดบแบบภายในนน วดจากจ านวนครงของการเปรยบเทยบ การสลบคาของขอมล N ตว ส าหรบการเรยงล าดบแบบภายนอกนนใชวธวดเชนนไมได เพราะความเรวของ CPU กบ I/O ตางกนมาก ดงนนการเรยงล าดบแบบนอกจงวดจากจ านวนครงในการถายโอนขอมล ระหวางหนวยความจ ากบอปกรณบนทกขอมลภายนอก โดยนบจากจ านวนรอบ (pass) ของการผสานขอมล นนคอ จ านวนครงทแตละรายการตองเกยวของกบการผสานขอมล

ในการเรยงล าดบภายนอกนน เนนความส าคญของวธการผสานมากกวาวธการเรยงล าดบแบบภายใน การผสานของการเรยงล าดบภายนอก มหลายวธดงน

1. Two-way-merge 2. The balanced merge 3. The polyphase merge 4. The cascade merge

การด าเนนการเรยงล าดบแบบภายนอก ม 2 ขนตอน ดงน 1. Phase Sort

1.1 แบงชดขอมลออกเปนกลมยอย ๆ (Sublist) 1.2 ด าเนนการจดเรยงขอมลในแตละ Sublist ดวยวธการแบบ Internal Sorting 1.3 จดให Sublist ตาง ๆ ทเรยงล าดบแลวอยใน 2 Sublist (แฟมขอมลยอย)

2. Phase Merge เชอม 2 Sublist เขาดวยกนเปน Sublist ใหม ดวยวธการผสาน (Merging)

ในทนจะศกษาวธการแรกคอ Two-way merge Sort กอนทจะศกษาขนตอนวธการเรยงแบบน ใหท าความเขาใจกบการ Merge กอน การ Merge จะใชในกรณทตองการเรยงขอมลทมปรมาณมากๆ โดยจะแบงขอมลออกเปน 2 กลม ซงกลมของขอมลทแบงออกมานตองไมมากเกนขนาดของหนวยความจ าทมอย และน าขอมลแตละกลมมาจดเรยงในหนวยความจ าโดยเลอกอลกอรทมทเหมาะสม อาจเปน Selection sort หรอ Quick sort ขอมลทจดเรยงใหมจะน าไปบนทกในสอภายนอก ซงจะท าใหเราไดกลมขอมล 2 กลมทไดจดเรยงล าดบขอมลแลว ดงตวอยาง สมมตวาขอมลสองกลมประกอบดวย

Page 19: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

19

1 13 24 26 2 15 27 38

กลมท 1 กลมท 2 การเรยงล าดบขอมล 2 กลมนเรมจากการเปรยบเทยบขอมลทละคของขอมลทงสองกลม ในทนคอคา 1 ในกลมท 1 และคา 2 ในกลมท 2 จากการเปรยบเทยบคาในกลมแรกมคานอยกวา จะน าคาของขอมลในกลมแรกบนทกในสอเปนชดของขอมลใหมทเปนผลลพธ ตอจากนนเลอนขอมลในกลมแรกเพอเปรยบเทยบกบขอมลในกลมท 2 ตอไป ในกลมแรกคอคา 13 ซงมคามากกวา แสดงวาขอมลผลลพธตวถดไปคอขอมลในกลมท 2 ในทนคอคา 2 จะน าคานไปบนทกในชดขอมลผลลพธดงภาพ 1 1

3 24

26

2 15

27

38

1

เปรยบเทยบ

1 1

3 24

26

2 15

27

38

1 2

เปรยบเทยบ

การเปรยบเทยบขอมลในแตละกลมจะเลอนต าแหนงของขอมลทละต าแหนง การเปรยบเทยบจะเปรยบเทยบเปนคๆ จนกระทงหมดขอมลกลมใดกลมหนง ขอมลทเหลอจะบนทกในชดขอมลผลลพธ ผลจากการท างานจะท าใหไดกลมของขอมลทเรยงล าดบเรยบรอยแลว โดยขอมลทงหมดจะบนทกในแฟมซงเกบในสอภายนอก 1 1

3 24

26

2 15

27

38

1 2 13

เปรยบเทยบ

Page 20: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

20

1 1

3 24

26

2 15

27

38

1 2 13

15

เปรยบเทยบ

1 13

24

26

2 15

27

38

1 2 13

15

24

เปรยบเทยบ

1 13

24

26

2 15

27

38

1 2 13

15

24

26

เปรยบเทยบ

เมอขอมลกลมใดกลมหนงหมด แตอกลมยงเหลออย กจะน าขอมลทเหลอบนทกตอทายในชดขอมลผลลพธดงรป

1 13

24

26

2 15

27

38

1 2 13

15

24

26

27

38

การเรยงแบบ Two-way merge Sort เปนวธการเรยงล าดบขอมลประเภท External sorting การเรยงล าดบวธนจะใชเรยงล าดบขอมลภายนอกหนวยความจ า ซงใชในกรณทหนวยความจ าหลกทมอยไมเพยงพอ โดยแบงการปฏบตการเปน 2 ระยะ คอ ระยะสราง run และระยะการ Merge เชน ตองการ Sort ขอมลขนาด 4500 รายการ แตมหนวยความจ าทจะท าการ Sort ขอมลขนาด 750 รายการเทานน ลกษณะนตองการใชการ Sort แบบภายนอกคอ Merge Sort โดยแบงรายการทจะเรยงล าดบเปนกลมยอย ซงพจารณาจาก buffer ในคอมพวเตอร จากตวอยาง buffer มขนาด 750 ดงนนจงแบงขอมล 4500 รายการเปนกลมละ 750 ทงหมด 6 กลม คออานขนมาครงละ 750 รายการ แลวท าการ sort โดยใช Internel sort ตอจากนนน าขอมลกลมยอยๆ มาเกบรวมกนใสแฟมยอยๆ ในทนน าไปเกบในแฟม 2 แฟม

Input Output Memory 250 250 250

Page 21: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

21

การน าขอมลเกบในแฟมเนองจากไมสามารถเกบในหนวยความจ าไดส าหรบระยะการ Merge เปนการน าขอมลทเกบในแฟม 2 แฟม น ามารวมกน โดยการรวมขอมลนจะเกบในแฟมใหมซงเปนผลลพธของการเรยงล าดบ ตอจากนนกระจายขอมลทงหมดมาเกบในแฟมผลลพธอกท าสลบไปมาจนกระทงขอมลทงหมดเรยงล าดบถกตอง เพอใหเขาใจไดดยงขน พจารณา ตวอยางตอไปน สมมตวามขอมลทไมไดจดเรยงคอ 50 110 95 10 100 36 153 40 120 60 70 130 22 140 80 และหนวยความจ ามความสามารถในการเกบขอมลไดเพยง 3 คาขอมลเทานน เราจ าเปนตองแบงขอมลออกเปน run แตละ run บรรจขอมลไดสงสด 3 คา ดงนนขอมลขางตนสามารถแบงออกเปน 5 run ตามรป

50 110 95 10 100 36 153 40 120 60 70 130 22 140 80 Run 1 Run 2 Run 3 Run 4 Run 5

ตอจากนนน าขอมลในแตละ run มาเรยงล าดบ จากนอยไปมาก แลวน าไปเกบในแฟม 2 แฟม ใน

ทนใหชอวา File1 และ File2 ตามล าดบ การกระจายจะสลบการเกบไปมา ดงรปตอไปน

File 1

50 95 110 40 120 153 22 80 140

File

2 10 36 100 60 70 130

ตอจากนนท าการ Merge ขอมลระหวาง Run ทเกบใน File1 และ File2 ขอมลท Merge จะน าไป

บนทกในแฟมผลลพธชอวา File3 การ Merge ขอมลระหวางแฟมทงสองมผลใหจ านวนขอมลใน run มากขนมาเปน 6 คาดวย ดงรป

File 1

Empty

File 2

Empty

File

3 EmptyFile 3 10 36 50 95 100 110 40 60 70 120 130 153 22 80 140

Run 1 Run 2 Run 3 จะเหนวาจ านวน run จะนอยลงแตจ านวนขอมลมากขนในแตละ run ซงขอมลมการจดเรยงล าดบ

มากขนตามไปดวย ในขนตอนตอไป จะกระจายขอมลในแตละ run ใหบนทกในแฟม file1 และ file2 สลบกนอก

Page 22: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

22

File 1

10 36 50 95 100 110 22 80 140

File

2 40 60 70 120 130 153

File 3

Empty

ตอจากนนท าการ Merge ขอมลระหวาง run ในแฟม file1 และ file2 โดยน าผลจากการ Merge

บนทกในแฟม File 3 File 1

Empty

File 2

Empty

File 3 EmptyFile 3

10 36 40 50 60 70 95 100 110 120 130 153 22 80 140

ตอจากนนน าขอมลใน file3 กระจายกลบไปใน file1 และ file2 ซงในรอบนจ านวนขอมลใน run จะ

มขนาดมากขนและขอมลในแฟม file1 และแฟม File2 จะมอยางละ 1 run เทานน File

1 10 36 40 50 60 70 95 100 110 120 130 153

File

2 22 80 140

File 3

Empty

การ Merge และการกระจายจะกระท าวนซ าไปเรอยๆจนกระทง จ านวน run ในแฟม file1 และ

file2 มจ านวน 1 run เมอท าการ merge ในครงน จะไดขอมลทเรยงล าดบเกบในแฟมผลลพธ ซงในทนคอ file3 นนเอง

Page 23: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

23

File 1

Empty

File 2

Empty

File 3 EmptyFile 3

10 22 36 40 50 60 70 80 95 100 110 120 130 140 153

สรปการเรยงล าดบขอมล การเรยงล าดบ ขอมลเปนเรองส าคญมากเรองหนงเนองจากท าใหผตองการใชขอมลเชน ผบรหาร,

ผปฏบตงาน (พนกงาน) สามารถท าความเขาใจกบขอมลหรอท าการคนหาขอมลไดงายและเรวยงขนตาม ทตองการ ประเภทของการจดการจดเรยงขอมลในระบบคอมพวเตอร แบงเปน 2 ประเภทคอ 1. Internal Sorting คอ การเรยงล าดบขอมลโดยเกบไวในหนวยความจ าหลก และขอมลของสมาชกจะถกเกบ อยในโครงสรางอารเรย 2. External Sorting คอ การเรยงล าดบขอมลโดยเกบไวในหนวยความจ าส ารอง ขอมลสวนใหญมจ านวนมาก จงไม สามารถเกบไวในหนวยความจ าหลกไดทงหมด ในหวขอการเรยงล าดบ นจะอธบายวธการเรยงล าดบขอมลในแตละวธโดยสรปอยางยอ ๆ เพอใชเปนแนวทางในการศกษาใน ระดบชนสงขนไป คงจะไมไดกลาวถงวธการขนตอนในการจดเรยงอยางละเอยดแตจะพยายามช ใหเหนถงจดเดนตาง ๆ ของการจด เรยงล าดบในแตละวธ วธหรอชนดของการเรยงล าดบ มวธตาง ๆ ทมกจะไดพบโดยทวไปดงน 1. SELECTION SORT 2. INSERTION SORT / LINEAR INSERTION SORT 3. BUBBLE SORT 4. SHELL SORT 5. BUCKET SORT /RADIX SORT 6. QUICK SORT 7. HEAP SORT / TREE SORT 1. การเรยงล าดบแบบเลอก (Selection Sort) เปนวธทงายทสดในการเรยงล าดบขอมล โดยเรมจาก - หาต าแหนงของขอมลทมคานอยทสดแลวสลบคาของต าแหนงขอมลนนกบคาขอมลในต าแหนง A(1) จะได A(1) มคานอยทสด - หาต าแหนงของขอมลทมคานอยทสดในกลม A(2), A(3),....,A(n) แลวท ากบสลบคาขอมลในต าแหนง A(2) อยางนเรอยไปจน กระทงไมเกน N-1 รอบ กจะไดขอมลทเรยงล าดบจากนอยไปมาก 2. การเรยงล าดบแบบแทรก (Insertion Sort) หลกการ คอ 1) อานขอมลทตองการเรยงล าดบเขามาทละตวโดยเรมจากตวแรกกอน และหาต าแหนงของขอมลทควรจะอย

Page 24: บทที่ 13 (Sorting) · บทที่ 13 การเรียงข้อมูล (Sorting) การเรียงล าดับข้อมูลเป็นการจัดการข้อมูลที่กระท

24

2) หาทวางส าหรบขอ 1. 3) Insert หรอแทรกขอมล ณ ต าแหนงในขอ 2. 3. การเรยงล าดบแบบบบเบล (Bubble Sort) วธการเรยงล าดบแบบบบเบลจะท าการเปรยบเทยบขอมลทอยในต าแหนง ทตดกน ถาขอมลไมอยในล าดบทถกตอง กจะท าการสลบต าแหนงของขอมลทเปรยบเทยบโดยทการเปรยบเทยบจะเรม ทต าแหนงท 1 กบต าแหนงท 2 กอน ตอไปนเทยบกบ ต าแหนงท 2 และต าแหนงท 3 จนถงต าแหนงทจดเรยงแลว จากนนจะกลบไปเรมตนการเปรยบเทยบอกจนกระทงจดเรยง เรยบรอยหมดทกต าแหนง

ในวธแบบ Bubble Sort คาในการเปรยบเทยบทนอยทสดหรอมากทสด จะลอยขนขางบน เหมอนกบฟองอากาศ

4. การรยงล าดบแบบเชลล (shell sort)

เปนรปแบบของการ sort ขอมลโดยการน าเอาขอดของการคนหาขอมลแบบ แทรกและแบบเลอกและหลกเลยง การเกดปญหาของทงแบบแทรกและแบบเลอก ซงการเปรยบเทยบขอมลในการเรยงล าดบแบบแทรก โดยการเปรยบเทยบ ขอมลทอยไกลออกไป ซงจะท าใหเราสามารถเรยงดบขอมลในต าแหนงทอยไกลออกไปหลงจากนนก จะเรยงล าดบขอมล ทอยใกลกนเขามา(กวาในครงแรก) และความหางของขอมลทเปรยบเทยบกจะนอยลงจนเหลอ 1 วธนคดคนเมอป ค.ศ.1959 โดย ด.แอล.เชลล(D.L.SHELL) เรยกวา การเรยงล าดบแบบเชลล(shell sort) 5. การเรยงล าดบโดยการใชฐานเลข (radix sort)

การเรยงล าดบแบบนการเรยงล าดบ จะอยบนพนฐานของการแทนต าแหนงของตวเลขทตองการน ามาเรยงล าดบ จะเรมจากตวทมเลขนยส าคญสงทสด ด าเนนจนกระทงถงตวเลขทมเลขนยส าคญต าสด การเรยงล าดบในวธนการเรยงล าดบ จะเรยงจากตวเลขทมนยส าคญนอยทสดกอน เมอตวเลขทงหมดถกน ามาเรยงล าดบตามเลขนยส าคญทสงขน ตวเลขทเหมอนกน ในต าแหนงนน จะตางกนในต าแหนงของเลขนยส าคญทนอยกวา การประมวลผลแบบนจะประมวลผลกบขอมลทงหมดได โดยทไมตองมการแบงขอมลแบบกลมยอย

6. การเรยงล าดบอยางเรว (quick sort)

ถกสรางและตงชอโดย ซ.เอ.อาร.ฮารเวร (C.A.R HOARE) การเรยงล าดบอยางเรว จะแบงขอมลเปนสองกลม โดยใน การจดเรยงจะเลอกขอมลตวใดตวหนงออกมา ซงจะเปนตวทแบงขอมลออกเปนสองกลม โดยกลมแรกจะตองมขอมลนอยกวา ตวแบง และกลมทมขอมลนอยกวาตวแบง และอกกลมจะมขอมลทมากกวาตวแบง ซงเราเรยกตวแบงวา ตวหลก(pivot) ในการเลอกตวหลกจะมอสระในการเลอกขอมลตวใดกไดทเราตองการ การเรยงล าดบแบบเรวเหมาะกบขอมลทมการเรยกซ า 7. การเรยงล าดบฮพ (heap sort) เปนการเรยงล าดบทอยบนพนฐานบนพนฐานของโครงสรางแบบไบนาร จะด าเนนการ 2 ขนตอน คอ 1. การจดขอมลในอะเรยใหสอดคลองกบความตองการของฮพ 2. การขจดหนอการเคลอนยายขอมลในต าแหนงสงสดหรอต าแหนงยอดของของฮพออกไปและสนบสนนขอมลขอมล ตวอนไปแทนต าแหนงนน