data structure lesson08

22
!"! แผนการสอนประจําบทเรียน รายชื ่ออาจารยผู จัดทํา นายพงษวุฒิ ดวงศรี รายละเอียดของเนื ้อหา ตอนที่ 8.1 การเรียงลําดับขอมูล (1 คาบ) เรื ่องที 8.1.1 ปจจัยที่มีผลตอการเรียงลําดับขอมูล เรื ่องที 8.1.2 ฟงกชัน Big O สําหรับการเรียงลําดับขอมูลแบบ Selection Sort ตอนที่ 8.2 การเรียงลําดับขอมูลแบบตาง (2 คาบ) เรื ่องที 8.2.1 การเรียงลําดับขอมูลในลักษณะ O(N 2 ) เรื ่องที 8.2.2 การเรียงลําดับขอมูลในลักษณะพิเศษ แนวคิด 1. การเรียงลําดับขอมูลเปนขบวนการที ่สําคัญ และใชมากในการประมวลผลขอมูล 2. เวลาที่ใชในการเรียงลําดับขอมูลขึ้นอยูกับ จํานวนขอมูล ขั ้นตอนในการเรียง และ ฮารดแวร 3. สําหรับในบทนี ้ขอเสนอ ขั ้นตอนในการเรียงลําดับขอมูล โดยเฉพาะ 4. นําเสนอ การเปรียบเทียบคาของ ฟงกชันจํานวนการเปรียบเทียบ กับจํานวนขอมูล 5. นําเสนอแนะการเรียงลําดับขอมูลดวยวิธีการตาง วัตถุประสงค หลังจากศึกษาบทเรียน นักศึกษาสามารถ 1. อธิบายฟงกชัน Big O(N 2 ) สําหรับการเรียงลําดับขอมูลได 2. อธิบายลักษณะการเรียงลําดับขอมูลแบบฟงกชัน Big O(N 2 ) ได 3. เขียนขั ้นตอนการดําเนินงาน สําหรับการเรียงลําดับขอมูลในลักษณะตางๆ ตามที่กําหนดให 4. นําไปประยุกต เขียนโปรแกรมสําหรับการเรียงลําดับขอมูลในลักษณะตางๆ ตามที่กําหนดให กิจกรรมการเรียนการสอน กิจกรรมที ่นักศึกษาตองทําสําหรับการเรียนการสอน ไดแก 1. ศึกษาเอกสารชุดวิชา/โฮมเพจชุดวิชา ตอนที8.1 และตอนที่ 8.2

Upload: suhatt-jantorn

Post on 18-Feb-2016

223 views

Category:

Documents


0 download

DESCRIPTION

กิจกรรมการเรียนการสอน กิจกรรมที่นักศึกษาตองทําสําหรับการเรียนการสอน ไดแก 1. ศึกษาเอกสารชุดวิชา/โฮมเพจชุดวิชา ตอนที่ 8.1 และตอนที่ 8.2 แผนการสอนประจําบทเรียน สื่อการสอน 1. โฮมเพจชุดวิชา 2. สไลดประกอบการบรรยาย (Powerpoint) 3. โปรแกรมคอมพิวเตอร ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน หัวเรื่อง เรื่องที่ 8.1.1 ปจจัยที่มีผลตอการเรียงลําดับขอมูล เ

TRANSCRIPT

Page 1: data structure lesson08

!"!

แผนการสอนประจําบทเรียน

รายช่ืออาจารยผูจัดทํา นายพงษวุฒ ิ ดวงศรี

รายละเอียดของเนือ้หา

ตอนที ่8.1 การเรียงลําดบัขอมูล (1 คาบ) เร่ืองท่ี 8.1.1 ปจจัยที่มีผลตอการเรียงลําดับขอมูล เร่ืองท่ี 8.1.2 ฟงกชัน Big O สําหรับการเรียงลําดับขอมูลแบบ Selection Sort

ตอนที ่8.2 การเรียงลําดับขอมูลแบบตาง (2 คาบ) เร่ืองท่ี 8.2.1 การเรียงลําดับขอมลูในลักษณะ O(N2) เร่ืองท่ี 8.2.2 การเรียงลําดับขอมูลในลักษณะพิเศษ

แนวคดิ 1. การเรียงลําดับขอมูลเปนขบวนการท่ีสําคัญ และใชมากในการประมวลผลขอมูล 2. เวลาที่ใชในการเรียงลําดับขอมูลขึ้นอยูกับ จํานวนขอมูล ข้ันตอนในการเรียง และ ฮารดแวร 3. สําหรับในบทน้ีขอเสนอ ข้ันตอนในการเรียงลําดับขอมูล โดยเฉพาะ 4. นําเสนอ การเปรียบเทียบคาของ ฟงกชันจํานวนการเปรียบเทียบ กับจํานวนขอมูล 5. นําเสนอแนะการเรียงลําดับขอมูลดวยวิธีการตาง ๆ

วัตถุประสงค หลังจากศึกษาบทเรียน นักศึกษาสามารถ 1. อธิบายฟงกชัน Big O(N2) สําหรับการเรียงลําดับขอมูลได 2. อธิบายลักษณะการเรียงลําดับขอมูลแบบฟงกชัน Big O(N2) ได 3. เขียนข้ันตอนการดําเนินงาน สําหรับการเรียงลําดับขอมูลในลักษณะตางๆ ตามที่กําหนดให 4. นําไปประยุกต เขียนโปรแกรมสําหรับการเรียงลําดับขอมูลในลักษณะตางๆ ตามที่กําหนดให

กิจกรรมการเรียนการสอน กิจกรรมท่ีนักศึกษาตองทําสําหรับการเรียนการสอน ไดแก 1. ศึกษาเอกสารชดุวิชา/โฮมเพจชุดวิชา ตอนที่ 8.1 และตอนที ่8.2

Page 2: data structure lesson08

!"#

2. ทํากิจกรรมของบทเรียนที่ 8 3. ทําแบบประเมินผลของบทเรียนที่ 8

เอกสารประกอบการสอน 1. เอกสารชดุวิชา

สื่อการสอน 1. โฮมเพจชุดวิชา 2. สไลดประกอบการบรรยาย (Powerpoint) 3. โปรแกรมคอมพิวเตอร

ประเมินผล 1. ประเมินผลจากกิจกรรมที่ทํา 2. ประเมินผลจากคําถามทายบทเรียน

Page 3: data structure lesson08

!""

ตอนท่ี 8.1 การเรียงลําดับขอมูล

หัวเรื่อง เร่ืองท่ี 8.1.1 ปจจัยที่มีผลตอการเรียงลําดับขอมูล เร่ืองท่ี 8.1.2 ฟงกชัน Big O สําหรับการเรียงลําดับขอมูลแบบ Selection Sort

แนวคดิ 1. เวลาสําหรับการเรียงลําดับขอมูลข้ึนอยูกับ จํานวนขอมูล ข้ันตอนในการเรียงลําดับ และ ฮารดแวร ในที่นี้จะสนใจเฉพาะ ข้ันตอนการเรียงลําดับขอมูล

2. นําเสนอการหาฟงกชันจํานวนการเปรียบเทียบขอมูลระหวางการเรียง กับจํานวนขอมูล 3. การเรียงลําดับขอมูลแบบ Selection Sort เปนไปตามฟงกชัน Big O(N2)

วัตถุประสงค หลังจากที่ศึกษาตอนที่ 8.1 แลว นักศึกษาสามารถ 1. อธิบายปจจัยที่มีผลตอการเรียงลําดับขอมูลได 2. อธิบายความหมายของฟงกชัน Big O ได 3. แสดงขั้นตอนการหาฟงกชัน Big O สําหรับการเรียงลําดับขอมูลแบบ Selection Sort 4. เขียนขั้นตอนการเรียงลําดับขอมูลแบบ Selection Sort ได 5. เขียนตําแหนงและลักษณะการยายขอมูล ระหวางการเรียงลําดับขอมูลแบบ Selection Sort ได

เรื่องที่ 8.1.1 ปจจัยที่มีผลตอการเรียงลําดับขอมูล

การเรียงลําดับขอมลู (Sorting) เปนเทคนิคท่ีสําคัญอยางหน่ึงในกระบวนการประมวลผลขอมูล ไมวาจะเปนการดําเนินงานทางดานธุรกิจ วิทยาศาสตร หรือ สังคมศาสตร ก็ตาม ขอมูลที่มีการเรียงกันเปนท่ีเรียบรอย ยอมเปนระเบียบ และงายตอการคนหา เชน ระเบียนคนไขของโรงพยาบาล หรือรายชื่อหนังสือในหอสมุด หากขอมูลไมมีการเรียงกันเลย การคนหาขอมูลจะยากลําบากและตองใชเวลามากหรืออาจไมสามารถคนหาไดเลย

การเรียงลําดับขอมูลจะประสบความสําเร็จรวดเร็วแคไหน ขึ้นอยูกับปจจัย 3 ประการ ปจจัยประ การแรกขึ้นอยูกับฮารดแวร ฮารดแวรที่มีความไวกวายอมทํางานไดเร็วกวาแนนอน ซึ่งเราจะไมสนใจปจจัยนี้ เพราะไมใชวิธีการแกปญหา ท่ีดีท่ีสุด ปจจัยที่สอง ขึ้นอยูกับจํานวนหรือขนาดของขอมูล ถาขอมูลมีเปนจํานวนมาก การเรียงลําดับขอมูลก็ยอมเสียเวลาเพ่ิมข้ึนเปนธรรมดา แตการเสียเวลาท่ีเพ่ิมข้ึนน้ัน เพิ่มขึ้นอยางไร ? มีความสัมพันธอยางไรกับจํานวนขอมูลและสัมพันธในลักษณะไหน สมมุติให N เปนจํานวนขอมลู เวลาที่ใชในการเรียงลําดับขอมูล เปนสัดสวนโดยตรงกับ N2 หรือที่เรียกวา Big O(N2) หมายความวา เวลาที่ใชในการเรียงลําดับขอมูลจะมากขึ้น ในลักษณะ กราฟพาราโบลา (Parabola) ซ่ึงจะมีการเปล่ียนแปลง

Page 4: data structure lesson08

!"$

เร็วมาก โดยจะแปรงผันเปนกําลังสอง เชน ถา N=10, N2 จะเปน 100 แตถา N=100, N2 จะเปน 10000. หรือถาเวลาในการเรียงลําดับขอมูลขึ้นอยูกับจํานวนขอมูล ในลักษณะ Big O(Nlog2N) หมายความวาจะมีความ สัมพนัธในลักษณะ N คูณ log2N ซ่ึงการเพ่ิมเวลา ในการเรียงลําดับขอมลู จะชากวาวิธีแรก แนนอน ความสัมพันธที่กลาวมาขางตน จะขึ้นอยูกับวิธีการในการเรียงลําดับขอมูล ซึ่งถือวาเปนปจจัยที่สาน และเปนปจจัย ที่มีความสําคัญยิ่ง ในการเรียงลําดับขอมลู อยางมีประสิทธิภาพ ที่เราจะตองศึกษาคนควา และเปนปจจัยที่เราใหความสนในที่สุด เพราะเปนวิธี ที่ขึ้นอยูกับความสามารถ ของนักโปรแกรม โดยตรง สําหรับในบทน้ี เราจะกลาวถึงการเรียงลําดับขอมูลในลักษณะ Big O(N2) และบางวิธ ี ที่คิดวาจะเปนประโยชนตอผูเรียนโดยตรง วิธีการเรียงลําดับขอมลูในลักษณะ Big O(N2) แมจะเรียงไดชากวา การเรียงลําดับขอมูลในลักษณะวิธีการอ่ืน แตในขอเท็จจริง วิธีการน้ีก็ไมเลวนักและถือวาเปนวิธีท่ีดีเลยท่ีเดียว สําหรับบางกรณี เชน ถาขอมูลไมมากมายมหาศาล ยิ่งในปจจุบัน ฮารดแวร มีความสามารถรวดเร็วยิ่ง การประมวลผลแทบไมมีความแตกแตงกัน การเรียงวิธีนี้ถึงจะชากวา แตถาขอมูลอยูในลักษณะที่ ใกลจะเรียงกัน หรือเรียงกันแลว วิธีนี้ยังสามารถตรวจสอบ และจบการทํางานกอนเวลา ไมเหมือนกับบางวิธีที่ถือวาเร็วกวา แมขอมูลที่เรียงกันแลวก็ไมสามารถตรวจสอบไดและจะตั้งหนาตั้งตาเรียงใหมตลอดเวลา ที่สําคัญอีกประการวิธีการน้ี งาย และส้ัน ในการเขียนโปรแกรม สําหรับวิธีการเรียงลําดับขอมูล ที่คุนเคยและถือวางายที่สุด คือการเรียงลําดับขอมูลแบบ Selection Sort ซึ่งเราจะใชวิธีการเรียงลําดับขอมูลวิธีนี้ เพื่อศึกษาความสัมพันธระหวาง เวลาในการเรียงลําดับขอมูล กับจํานวนขอมูล ในลักษณะฟงกชัน Big O(N2)

Selection Sort ดังไดกลาวมาแลว การเรียงลําดับขอมูลวิธีน้ีเปนวิธีท่ีงายและส้ันท่ีสุด แตก็เปนวิธีที่ทํางานมากที่สุด ดังนั้นหากมีขอมูลเปนจํานวนมาก การเรียงลําดับขอมูลดวยวิธีนี้ก็จะไมเหมาะสมมากนัก สําหรับข้ันตอนการดําเนินงานมีดังน้ี

6. เร่ิมจากการนํา คาแรก มาเทียบกับคาที่สองของแถวลําดับ ถาคาแรก มีคานอยกวาคาท่ีสอง จะทําการสลับคาท้ังสอง (สําหรับการเรียงลําดับขอมูลจากมากไปนอย) เชน ในบรรทัดท่ี 1 และ 2 ของ ตัวอยางขางลาง ในกรณีที่ตองการเรียงลําดับขอมูลจากนอยไปหามาก ใหเปล่ียนเง่ือนไข โดยใหคาแรกมากกวาคาที่สอง จึงทําการสลับคากัน, ทําเชนน้ีไปเร่ือยๆ โดยการนําคาแรก มาเทียบกับคาที่สาม , คาท่ีส่ี, . . . , คาสุดทาย เพื่อยายคาที่มีคามากที่สุดมาอยู ณ ตําแหนงแรก ของแถวลําดับ และเม่ือส้ินสุดก็ถือวาคาแรก เปนคาที่เรียงแลวในแถวลําดับ ดังบรรทัดท่ี 2-4 ของตัวอยาง

7. ดําเนินการเชนเดียวกับขอ 1. โดยการนําคาท่ีสอง มาเทียบกับคาถัดไปจนครบทุกคาของแถวลําดับ เพ่ือยายขอมูลท่ีมีคามากท่ีสุดเปนลําดับสอง มาอยู ณ ตําแหนงที่สองของแถวลําดับ เชนในบรรทัดท่ี 5 ถึงที่ 7 ของตัวอยาง

8. ดําเนินการเชนเดียวกับขอ 1. กับคาท่ีสาม, คาท่ีส่ี ไปเร่ือยๆ จนถึง คารองสุดทาย ของแถวลําดับ ซึ่งในที่สุดจะไดชุดขอมูลในแถวลําดับที่เรียงกันตามความตองการ

Ex ขอมูลที่จัดเก็บในแถวลําดับมีดังนี้ 8, 20, 30, 3, 4 จงเรียงลําดับขอมูลจากมากไปนอย

Page 5: data structure lesson08

!"%

กําหนดให i : เปนตัวแปรเก็บดัชนีของคาที่ตองการเรียง j : เปนตัวแปรเก็บดัชนีของคาที่จะนํามาเปรียบเทียบกับคาที่ตองการเรียง 1) i=1, j=2 8 20 30 3 4 2) 20 8 30 3 4 3) 30 8 20 3 4 4) 30 8 20 3 4 5) i=2, j=3 30 8 20 3 4 6) 30 20 8 3 4 7) 30 20 8 3 4 8) i=3, j=4 30 20 8 3 4 9) 30 20 8 3 4 10) i=4, j=5 30 20 8 3 4 11) 30 20 8 4 3

Algorithm (การเรียงลําดับขอมูลจากนอยไปมาก) กําหนดให Max : เปนตัวแปรเก็บจํานวนขอมูลทั้งหมด

A[Max] : เปนตัวแปรเก็บขอมูลในแถวลําดับ Procedure SelectionSort(Var : A[Max])

Begin

For (I := 1 to Max-1) Do

Begin

For (J := I+1 to Max) Do

If(A[I] > A[J]) Then Swape(A[I],A[J]);

End;

End.

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

Page 6: data structure lesson08

!"&

Algorithm (การเรียงลําดับขอมูลจากนอยไปมาก) Procedure SelectionSort(Var : A[Max])

Begin

For (I := 1 to Max-1) Do

Begin

Target := I;

For (J := I+1 to Max) Do

If (A[Target] > A[J]) Then Target := J;

If (I ≠ Target) Then Swape(A[I],A[Target]); End;

End.

เรื่องที่ 8.1.2 ฟงกชัน Big O สําหรับการเรียงลําดับขอมูลแบบ Selection Sort

จากตัวอยางขางตน จะเห็นวา ถาดัชนี I = 1 จะตองทําการเปรียบเทียบกับขอมูลที่เหลือทุกคา ดังนั้นถามีขอมูลจํานวน N คาก็จะตองเปรียบเทียบถึง N–1 คร้ัง ทํานองเดียวกัน ถาดัชนี I = 2 ก็จะตองทําการเปรียบเทียบกับขอมูลที่เหลือ N–2 คา และถาดําเนินการเปรียบเทียบไปเร่ือย ๆ จนถึงคารองสุดทาย I = N-1 การเปรียบเทียบจะทําการเพียงครั้งเดียว คือคาท่ี N ซ่ึงท้ังหมดสรุปไดดังน้ี

ถา I = 1 จะทําการเปรียบเทียบ N – 1 คร้ัง I = 2 จะทําการเปรียบเทียบ N – 2 คร้ัง I = 3 จะทําการเปรียบเทียบ N – 3 คร้ัง o o o “ o o o I = N-1 “ N– (N-I) คร้ัง ดังนั้นจํานวนครั้งเปรียบเทียบทั้งหมด = (N-1) + (N-2) + (N-3) + o o o + 1 จํานวนครั้งเปรียบเทียบทั้งหมด = ((N-1)+1)(N-1)/2 = (N-1)N/2 =N2/2 - N/2

Page 7: data structure lesson08

!"'

ลักษณะของกราฟพาราโบรา (Parabola)

จะเห็นวาพจน ท่ีมีผลมากท่ีสุดสําหรับการเรียงในวิธีการน้ีคือ N2 ดังน้ันในทาง Computer เราจะสนใจเฉพาะลําดับกําลังสอง (Order N2) หรือเขียนในสัญญาลักษณของ Big O(N2) หรือ O(2) ซ่ึงลักษณะน้ี เปนไปตามสมการพาราโบลา ลักษณะของกราฟน้ี จะมีการเปลี่ยนแปลงอยางรวดเร็วเมื่อคา N เพิ่มขึ้น

กิจกรรม 8.1 1. จงเขียน โมดูล (Module) เพ่ือทําการรับคา เก็บในตัวแปร แถวลําดับ A[Max] โดย

Max คือจํานวนขอมูลมากที่สุด ที่จะรับไดในแถวลําดับนี้ ในตอนแรกใหรับจํานวนขอมูลที่จะรับเขามาซึ่งจะมีคาไมมากเกินกวาคา Max จากนั้นจึงวนรับคาจนกวาจะครบ

2. จงแสดงใหเห็นวาการเรียงลําดับขอมูลแบบ Selection Sort เปนการเรียงลําดับขอมูลในลักษณะ Big O(N2)

3. จงเขียนโมดูล สําหรับการเรียงลําดับขอมูลจากมากไปหานอย แบบ Selection Sort 4. จงแสดงลักษณะและตําแหนงของขอมูล ระหวางการเรียงลําดับขอมูลจากนอยไปหามาก แบบ

Selection Sort โดยชุดขอมูลมีดังนี้ 4.1. 2, 1, 8, 4, 3, 9, 6, 0, 7, 5 4.2. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

Page 8: data structure lesson08

!"(

ตอนท่ี 8.2 การเรียงลําดับขอมูลแบบตาง

หัวเรื่อง เร่ืองท่ี 8.2.1 การเรียงลําดับขอมลูในลักษณะ O(N2) เร่ืองท่ี 8.2.2 การเรียงลําดับขอมูลในลักษณะพิเศษ

แนวคดิ 1. นําเสนอการเรียงลําดับขอมูลในลักษณะ O(N2) แบบ Bubble Sort, Insertion Sort, Shell Sort 2. นําเสนอการเรียงลําดับขอมูลในลักษณะพิเศษ สําหรับกรณีที่มีขอมูลจํานวนมาก ๆ ดวยวิธ ี

Merge Sort, External Sort 3. การเรียงลําดับขอมูลท่ีเปนตัวเลข แบบ Bucket Sort สามารถเรียงไดโดยตรง โดยจัดเก็บในตําแหนงที่ตรงกับคานั้น ๆ

วัตถุประสงค หลังจากที่ศึกษาตอนที่ 8.2 แลว นักศึกษาสามารถ 1. เขียนข้ันตอนการเรียงลําดับขอมูลในลักษณะ O(N2) แบบ Bubble Sort, Insertion Sort, Shell

Sort ได 2. เขียนขั้นตอนการแบงแฟมขอมูลหลักเปนแฟมขอมูลยอย ๆ ได 3. เขียนข้ันตอนการเรียงลําดับขอมูลในลักษณะพิเศษ แบบ Bucket Sort, Merge Sort, External

Sort ได 4. อธิบายความแตกตางระหวาง การเรียบลําดับขอมลูในลักษณะ O(N2) กับลักษณะพิเศษได 5. เขียนตําแหนง และลักษณะการยายขอมูล ระหวางการเรียงลําดับขอมูลแบบตางๆ ตามไดรับมอบหมายได

เรื่องที่ 8.2.1 การเรียงลําดบัขอมูลในลักษณะ O(N2)

ตามที่กลาวมาในตอนที่แลว การเรียงลําดับขอมูลขึ้นอยูกับปจจัยหลายประการ เชน จํานวนขอมูลที่จะเรียง หรือ วิธีในการเรียงลําดับขอมลู เปนตน นอกจากน้ียังทราบวาการเรียงลําดับขอมูลสําหรับกรณีศึกษาน้ี เปนไปตามลักษณะ Big O(N2) ซึ่งหมายความวา การเรียงลําดับขอมูลข้ึนอยูกับ กําลังสองของจํานวนขอมูล การเรียงลําดับขอมลูในลักษณะ Big O(N2) มีหลายวิธ ีที่ยกมาเปนเพียงบางวิธี ซ่ึงถาสนใจสามารถ ศึกษาเพิ่มเติมจากหนังสือโครงสรางขอมูลทั่ว ๆ ไปได

Page 9: data structure lesson08

!")

Bubble Sort

เปนการเรียงลําดับขอมูลในสัญญาลักษณ Big O(N2) เชนเดียวกับการเรียงลําดับขอมูลแบบ Selection Sort และยังมีลักษณะการเรียงท่ีคลายกัน กลาวคือจะหาคาที่ตองการเรียง มาที่ละคา โดยจะเริ่มที่ตําแหนงแรก หรือตําแหนงสุดทายของแถวลําดับก็ได สิ่งที่แตกตางสําหรับการเรียงแบบ Bubble Sort คือจะไมนําคาที่ตองการเรียงมาเทียบกับทุกคาเหมือน Selection Sort แตจะเปรียบเทียบกับคาถัดไปที่ละคูไปเร่ือยๆ เพ่ือดันคาท่ีตองการมาดานหนาหรือดานหลัง ข้ันตอนการเรียงลําดับขอมูลมีดังน้ี

1. เร่ิมจากการนําคาแรก มาเปรียบเทียบกับคาถัดไป ซ่ึงก็คือคาท่ีสองในแถวลําดับ ถาไมตรงตามจุดประสงคจะทําการสลับคาท้ังสอง จากนั้นขยับมาเปรียบเทียบ ระหวางคา ที ่ 2 และที ่3 เชนใน บรรทัดท่ี 1-2 ของตัวอยาง ทําเชนน้ีไปเร่ือยๆ จนกวาจะถึงคาสุดทาย ก็จะไดคาที่เรียงแลวคาแรกอยู ณ ตําแหนงสุดทายของ แถวลําดับ

2. ดําเนินการเชนเดียวกับขอ 1. โดยเริ่มตน จากการเปรียบเทียบ คาที ่2 กับ คาที ่3 และเปรียบเทียบ ทีละคูไปเร่ือย ๆ จนถึงคา รองสุดทาย ก็จะไดคาที่เรียงแลว คาที ่2 อยู ณ ตําแหนงรองสุดทาย ของแถวลําดับ เชน บรรทัดท่ี 6-9 ของตัวอยาง

3. ดําเนินการเชนเดียวกับขอ 1. จนครบทุกคา ก็จะไดแถวลําดับที่เรียงตามความประสงค

Ex จากขอมูล 8, 20, 30, 3, 4 จงเรียงลําดับขอมูลจากนอยไปหามาก 1) i=1, j=2 8 20 30 3 4 2) 8 20 30 3 4 3) 8 20 30 3 4 4) 8 20 3 30 4 5) 8 20 3 4 30 6) i=1, j=2 8 20 3 4 30 7) 8 20 3 4 30 8) 8 3 20 4 30 9) 8 3 4 20 30 10) i=1, j=2 8 3 4 20 30 11) 3 8 4 20 30 12) 3 4 8 20 30 13) i=1, j=2 3 4 8 20 30 14) ผลลัพธ 3 4 8 20 30

Page 10: data structure lesson08

!$*

Algorithm (การเรียงลําดับขอมูลจากนอยไปมาก)

Procedure BubbleSort(Var : A[Max])

Begin

For (I := Max-1 Downto 1) Do

Begin

For (J := 1 to I) Do

If(A[J] > A[J+1]) Then Swape(A[J],A[J+1]);

End;

End.

Procedure BubbleSort(Var : A[Max])

Begin

For (I := 2 to Max) Do

Begin

For (J := Max Downto I) Do

If(A[J-1] > A[J]) Then Swape(A[J],A[J-1]);

End;

End.

จะเห็นวาการเรียงลําดับขอมูลในลักษณะน้ีเปนการเรียงแบบO(N2) ซึ่งไมวาการเรียงลําดับขอมูลจะ

ดันมาดานหนาหรือดานหลัง ผลออกมาไมแตกตางกัน ส่ิงท่ีสําคัญท่ีสุดและถือวาการเรียงลําดับวิธีน้ีมีประสิทธิภาพเหนือวิธีอื่นคือสามารถตรวจสอบขอมูลวามีการเรียงลําดับแลวหรือยัง ถาขอมูลมีการเรียงกันเปนท่ีเรียบรอยก็สามารถจบการทํางานกอนกําหนดได (การเรียงลําดับขอมลู แบบมีการตรวจสอบการเรียงของขอมูล)

Procedure BubbleSort(Var : A[Max])

Begin

N := Max –1;

Sort := ‘Y’;

While (N> 0 AND Sort =’Y’) Do

Begin

Sort := ‘N’;

For (J := 1 to N) Do

Begin

If(A[J] > A[J+1]) Then

Begin

Swape(A[J],A[J+1]);

Sort := ‘Y’;

End;

End;

N := N –1;

End;

Page 11: data structure lesson08

!$!

End.

Insertion Sort

เปนวิธีการเรียงลําดับขอมูลโดยการยายคาและแทรกลงในตําแหนงที่เหมาะสม ซึ่งจะเริ่มตน จากสวนหนาแลวขยายไปที่ละคาจนครบทุกคาในแถวลําดับขอมูล ข้ันตอนการเรียงลําดับขอมูลมีดังน้ี

1. เริ่มจากการนําขอมูลคาที่ 2 มาเปรียบเทียบกับคาแรกในแถวลําดับ ถาไมเปนไปตามจุดประสงค ก็ทําการสลับคากัน

2. นําขอมูลคาที่ 3 มาเปรียบเทียบกับคาแรก ถาไมเปนไปตามจุดประสงค ใหเก็บคาที่ 3 ไว แลวทําการเล่ือนขอมูล คาที่ 1, คาที่ 2 ขึ้นมาหนึ่งลําดับ ใหมาอยู ณ ตําแหนง ที ่2 และ 3 ตามลําดับ จากนั้นจึงนําคาที่ 3 ท่ีเก็บไวกอนหนาน้ี มาจัดเก็บลงในตําแหนงที ่1 ข้ันตอนการเรียง คาที่ 3. ถือวาสําเร็จสมบูรณ ดังเชนในตัวอยาง บรรทัดท่ี 2–5, แตถาการเปรียบเทียบถูกตองตามความตองการ ใหนําขอมูลคาที่ 3 มาเปรียบเทียบกับคาที่ 2 แลวดําเนินงาน ตามขั้นตอนขางตนตอไป

3. ดําเนินงานเชนเดียวกับขอ 2. กับคาที ่4, ที ่5, . . . จนครบทุกคา สุดทายจะไดแถวลําดับที่เรียงกันตามความตองการ ดังตัวอยางขางลาง

Ex จากขอมูล 8, 20, 6, 15, 4 จงเรียงลําดับขอมูลจากนอยไปหามาก 1) I=2, j=1 8 20 6 15 4 2) I=3, j=1 8 20 6 15 4 3) 8 20 20 15 4 4) 8 8 20 15 4 5) I=4, j=1 6 8 20 15 4 6) I=5, j=1 6 8 15 20 4 7) 6 8 15 20 20 8) 6 8 15 15 20 9) 6 8 8 15 20 10) 6 8 8 15 20 11) 6 6 8 15 20 12) 4 6 8 15 20

Page 12: data structure lesson08

!$#

Algorithm (การเรียงลําดับขอมูลจากนอยไปมาก) กําหนดให A[I] : คือคาท่ีตองการเรียง A[J] : คือคาที่จะนํามาเปรียบเทียบกับคาที่ตองการเรียง

Procedure Insertion_Sort (Var : A[Max])

Begin

For (I := 2 to Max) Do

Begin

J := 1; flag := ‘Y’;

While (J<I AND flag = ‘Y’) Do

Begin

If(A[I] < A[J]) Then

Begin

temp := A[I];

For (n := I downto J+1) Do A[n] := A[n-1];

A[J] := temp;

flag := ‘N’;

End;

J := J+1;

End;

End;

End.

Shell Sort

เน่ืองจากการเรียงลําดับขอมูลแบบ O(Nlog2N) แมจะมีความสามารถในการดําเนินงานไดเร็วกวา แตก็มีความยุงอยากพิศดารมากกวาแบบ O(N2) แตถาขอมูลไมมากนัก หรือขอมูลใกลจะเรียงกันอยูแลว การเรียงแบบ O(N2) ก็จะมีประสิทธิภาพไมดอยไปกวาแบบ O(Nlog2N) แถมยังงายกวามาก ดังน้ัน Shell Sort จึงเปนทางออกสําหรับการแกปญหาเหลาน้ี การเรียงลําดับขอมูลแบบ Shell Sort ก็เหมือนการเรียงลําดับแบบ O(N2) ทั่วๆไป ตางกันตรงที่พยายามแบงขอมูลออกเปนสวนๆ แลวจึงเรียงลําดับขอมูลเฉพาะในสวนน้ันๆ กอน จากนั้นจึงทําการแบงขอมูลเปนสวนยอยๆแตใหมีขนาดที่ใหญขึ้นแลวทําการเรียงลําดับอีก จุดประสงคเพื่อใหเปนไปตาม คุณลักษณะเดนของการเรียงแบบ O(N2) น้ันเอง สําหรับขนาดของกลุมยอย หรือชวงของขอมูลที่จะแบง ใหขึ้นอยูกับดุลพินิจของผูดําเนินงาน แตก็ไมควรเล็กเกินไป มิเชนน้ันจะกลายเปน Selection หรือ Bubble Sort ในที่นี้จะใหจํานวนขอมูลแตละชวงเปนไปดังนี้ Pir1 = 1, Piri+1 = 3 Piri + 1; ดังน้ัน Piri จะมีคา : 1, 4, 13, 40, o o o

Page 13: data structure lesson08

!$"

Ex จากขอมูล 27, 80, 2, 46, 16, 12, 54, 64, 22, 17, 66, 37, 35 จงเรียงลําดับขอมูลจากนอยไปหามาก 1) ชวง=5 27 80 2 46 16 12 54 64 22 17 66 37 35 2) 12 80 2 46 16 27 54 64 22 17 66 37 35 3) 12 37 2 46 16 27 54 64 22 17 66 80 35 4) 12 37 2 46 16 27 54 35 22 17 66 80 64 5) 12 37 2 22 16 27 54 35 46 17 66 80 64 6) ชวง=2 12 37 2 22 16 27 54 35 46 17 66 80 64 7) 2 37 12 22 16 27 46 35 54 17 64 80 66 8) ชวง=1 2 17 12 22 16 27 46 35 54 37 64 80 66

9) 2 12 16 17 22 27 35 37 46 54 64 66 80

Algorithm (การเรียงลําดับขอมูลจากนอยไปมาก) กําหนดให Pir : ตัวแปรเก็บชวงความหางของขอมูล

Leng : ตัวแปรเก็บจํานวนครั้งที่จะทําซ้ําสําหรับชวงขอมูลนั้น การเรียงลําดับขอมูลในกลุมยอยจะเรียงแบบ Bubble Sort

Page 14: data structure lesson08

!$$

Procedure Shell_Sort (Var : A[Max])

Begin

Pir := Max;

Do

Begin

Leng := Pir := Pir /3;

For (I:=1 to Leng) Do

Begin

Sort := ‘Y’;

n := Max – Leng;

While(n>1 && Sort=’Y’) Do

Begin

Sort := ‘N’;

For(J:=I to n Step Leng) Do

Begin

If(A[J] > A[J+Leng]) Then

Begin

Swape(A[J],A[J+Leng]);

Sort := ‘Y’;

End;

End;

n := n – Leng;

End;

End;

End;

While(Pir > 0);

End.

เรื่องที่ 8.2.2 การเรียงลําดับขอมูลในลักษณะพิเศษ

Bucket Sort

การเรียงลําดับขอมูลดวยวิธีนี้ ไมใชเปนการเรียงแบบ O(N2) แตเปนวิธีที่ควรศึกษาเพราะจะเปนประโยชนอยางมาก สําหรับบางกรณี เนื่องจากเปนวิธีเรียงลําดับขอมูล ท่ีเร็วท่ีสุด แตก็มีขอจํากัดมากที่สุด เพราะใชไดเฉพาะกับขอมูลที่เปนจํานวนเต็ม (Integer) เทาน้ัน และยังสิ้นเปลืองหนวยความจํามาก มากเทากับคาสูงสุดของขอมูล หลักการเรียงลําดับขอมูลวิธีน้ี จะเก็บคาตามดัชนีที่มีคาตรงตามขอมูลนั้นเลย ดังน้ันวิธีน้ีจะเก็บไดเฉพาะคาบวกเทาน้ัน สําหรับบางภาษาสามารถใชดัชนีเปนอักขระ ดังน้ันก็จะสามารถเรียงตามอักขระได แตก็เปนกรณียกเวน ไมใชใชไดทุกภาษา

Algorithm (การเรียงลําดับขอมูลจากนอยไปมาก)

Page 15: data structure lesson08

!$%

กําหนดให BigVal : ตัวแปรเก็บขอมูลที่มีคามากที่สุด (ตัวแปรอื่น ๆ ยังคงเหมือนเดิม) bucket[I] : ตัวแปรชุดชั่วคราวสําหรับใชในการเรียงลําดับขอมูล

(สําหรับกรณีที่ขอมูลไมมีคาซ้ํากัน) Procedure Bucket_Sort (Var : A[Max])

Begin

BigVal := -9999;

For(I:=1 to Max) Do If(A[I] > BigVal) Then BigVal := A[I];

For(I:=1 to BigVal) Do bucket[I] := 0;

For(I:=1 to Max) Do bucket[A[I]] := A[I];

J := 0;

For(I:=1 to BigVal) Do

Begin

If(bucket[I] > 0) Then

Begin

J := J+1;

A[J] := bucket[I];

End;

End;

End.

(สําหรับกรณีท่ีขอมูลมีคาซํ้ากัน)

Procedure Bucket_Sort (Val : A[Max])

Begin

BigVal := -9999;

For(I:=1 to Max) Do If(A[I] > BigVal) Then BigVal := A[I];

For(I:=1 to BigVal) Do bucket[I] := 0;

For(I:=1 to Max) Do bucket[A[I]] := bucket[A[I]] + 1;

J := 0;

For(I:=1 to BigVal) Do

Begin

If(bucket[I] > 0) Then

For(n=1 to bucket[I]) Do

Begin

J := J+1;

A[J] := I;

End;

End;

End.

Merge sort

เปนวิธีการเรียงแบบรวมขอมูลจาก 2 แถวลําดับ ที่มีขอมูลเรียงกันอยูแลว หลักการเรียงลําดับขอมูลวิธีนี้ เริ่มจากการนําคาแรกของแถวลําดับแรก มาเปรียบเทียบกันคาแรกของแถวลําดับที่ 2 ถาคาของแถว ลําดับใดนอยกวาจะจัดเก็บคานั้นลงในแถวลําดับใหม (สําหรับการเรียงจากนอยไปมาก) แลวอานคาถัด

Page 16: data structure lesson08

!$&

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

Ex จงเรียงลําดับขอมูลจากแถวลําดับ 2 แถวลําดับ ดวยวิธ ี Merge Sort โดยเรียงลําดับขอมูลจากนอยไปหามาก กําหมดใหแถวลําดับที่ 1 มีคา 11, 23, 42 ; แถวลําดับที่ 2 มีคา 9, 25 ข้ันตอนการเรียงลําดับขอมูลมีดังน้ี

1. นําคา 11 จากแถวลําดับที่ 1 มาเปรียบเทียบกับคา 9 ในแถวลําดับที่ 2 จะเห็นวา 9 นอยกวา 11 ดังนั้นจึงจัดเก็บคา 9 ลงใน แถว ลําดับใหมแถวลําดับใหมมีคาดังนี้ 9

2. อานคา 25 จากแถวลําดับที่ 2 เน่ืองจากเลข 9 ที่จัดเก็บไปอยูแถวลําดับที่ 2 3. คา 11 จากแถวลําดับที่ 1 นอยกวา คา 25 ในแถวลําดับที่ 2 ดังน้ันจัดเก็บคา 11 ลงในแถวลําดับใหม แถวลําดับใหมมีคาดังนี้ 9, 11

4. อานคา 23 จากแถวลําดับที่ 1 เน่ืองจากเลข 11 ที่จัดเก็บไปอยูแถวลําดับที่ 1 5. คา 23 จากแถวลําดับที่ 1 นอยกวา คา 25 ในแถวลําดับที่ 2 ดังน้ันจัดเก็บคา 23 ลงในแถวลําดับใหม แถวลําดับใหมมีคาดังนี้ 9, 11, 23

6. อานคา 42 จากแถวลําดับที่ 1 เน่ืองจากเลข 23 ที่จัดเก็บไปอยูแถวลําดับที่ 1 7. คา 42 จากแถวลําดับที่ 1 มากกวา คา 25 ในแถวลําดับที่ 2 ดังน้ันจัดเก็บคา 25 ลงในแถว ลําดับใหม แถวลําดับใหมมีคาดังนี้ 9, 11, 23, 25

8. เน่ืองจากคา ในแถวลําดับที่ 2 หมด ดังนั้นจึงจัดเก็บคาที่เหลือในแถวลําดับที่ 1 ลงในแถวลําดับใหมจนหมด ดังนั้นแถวลําดับใหมจึงมีคาดังนี้ 9, 11, 23, 25, 42

ในการเรียงขอมูลแบบ Merge Sort ไมมีขอจํากัดที่จะเรียงเฉพาะขอมูล 2 แถวลําดับ แตจะสามารถเรียงลําดับขอมูลจากหลาย ๆ แถวลําดับได ตามความตองการ ลักษณะเดน สําหรับการเรียงลําดับขอมูลแบบนี้คือ กรณีที่มีขอมูลจํานวนมาก ๆ มากจนหนวยความจําหลัก (Main Memory) ไมสามารถรับได และขอมูลเหลาน้ี ไดจัดเก็บในแฟมขอมูลเรียบรอยแลว ซึ่งในความเปนจริง มักเปนเชนน้ี การเรียงลําดับขอมูล จะตองแบงเปนแฟมเล็ก ๆ หลายแฟม แลวดําเนินการเรียงลําดับขอมูลทีละแฟม ซึ่งแลวแตจะเลือกเรียงดวยวิธีใดก็ได จากนั้นจึงทําการรวมแฟมขอมูลเล็กๆ เหลาน้ีอีกที

Ex จากขอมูล 42, 23, 74, 11, 65, 58, 94, 36, 99, 87 จงเรียงลําดับขอมูลจากนอยไปหามาก จากโจทยแบงเปนแฟมขอมูลยอย ๆ ไดดังน้ี

Page 17: data structure lesson08

!$'

42 23 74 11 65 58 94 36 99 87 23 42 11 74 58 65 36 94 87 99 11 23 42 74 36 58 65 94 87 99 11 23 36 42 58 65 74 94 87 99 11 23 36 42 58 65 74 87 94 99

Algorithm (การแยกแฟมขอมูลออกเปนแฟมเล็ก ๆ) กําหนดให Temp : ตัวแปรเก็บชื่อแฟมขอมูลยอย

Data.dat : ชื่อแฟมขอมูลหลัก แฟมขอมูลยอยเก็บขอมูลไมเกิน 10000 คา

(* การประกาศตัวแปรเพื่อเตรียมเก็บรายชื่อแฟมขอมูลยอย ๆ *) Var Temp : Array[1..15] of String[15];

Id : String[2];

(* การเก็บรายชื่อแฟมขอมูลยอย ๆ *) For (I:=1 to 15) Do

Begin

Str(I, Id); (* Integer to String *)

Temp[I] := “tempFile";

Concat(Temp[I],Id);

End;

(* การแยกแฟมขอมูล *)

Page 18: data structure lesson08

!$(

I := 1;

OpenFile(“Data.dat”);

OpenFile(Temp[I]);

Count := 0;

While (Read(Vardata from ”Data.dat”) ≠ EOF) Do Begin

If (Count > 10000) Then

Begin

CloseFile(Temp[I]);

I := I+1;

Count := 0;

OpenFile(Temp[I]);

End;

Write(Vardata to Temp[I]);

Count := Count + 1;

End;

CloseFile(Temp[I]);

End.

การเรียงลําดบัขอมูลในไฟลยอย

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

Algorithm (การรวมแฟมขอมูล A และ B เก็บใสในแฟมขอมูล C)

Page 19: data structure lesson08

!$)

Procedure Merge_Sort (FILE : FileA , FileB , FileC)

Begin

OpenFile (FileA , FileB , FileC);

Read (a from FileA, b from FileB);

While ((FileA not EOF) and (FileB not EOF)) Do

Begin

If (a < b) Then

Begin

Write (a to FileC) ;

Read (a from FileA) ;

End;

Else

If (a > b) Then

Begin

Write (b to FileC);

Read (b from FileB);

End;

Else

Begin

Write (a , b to FileC);

Read (a from FileA , b from fileB);

End;

End;

While (FileA not EOF) Do

Begin

Write (a to FileC) ;

Read (a from FileA) ;

End;

While (FileB not EOF ) Do

Begin

Write (b to FileC);

Read (b from FileB );

End;

CloseFile (FileA , FileB , FileC);

End.

External Sort

ดังไดกลาวมาแลว สําหรับกรณี ที่มีขอมูลจํานวนมาก ๆ มากจนไมสามารถเรียงลําดับขอมูลในคราวเดียวกันได จําเปนตองแบงขอมูลเปนแฟมเล็ก ๆ เพ่ือทําการเรียงลําดับกอนนํามารวมกันใหมอีกคร้ัง สําหรับ วิธีที่จะกลาวถึงนี้ ก็เปนอีกวิธีหน่ึง ที่ใชในการแกปญหา การเรียงลําดับขอมูลจํานวนมาก ๆ ซ่ึงเปนวิธีที่ งาย มีประสิทธิภาพ และถือวาเปนวิธีเรียงลําดับขอมูลภายนอกโดยแทจริง ดังนั้นจึงไมจําเปนตองใชหนวยความจํามาก แตวิธีนี้จะขึ้นอยูกับความสามารถในการเขาถึงขอมูล (Access Time) ของ Hard disk โดยตรง

Page 20: data structure lesson08

!%*

หลักการเรียงลําดับขอมูลมีดังน้ี

1. อานขอมลู จากแฟมขอมูลหลักมา 1 คา แลวจัดเก็บลงในแฟมขอมูลชั่วคราว แฟมที่ 2 2. อานขอมลู จากแฟมขอมูลหลักมาอีก 1 คา ถาคาท่ีอานมาได มีคามากกวา คาท่ีอานมากอนหนาน้ี ใหจัดเก็บลงในแฟมขอมูลชั่วคราวแฟมที่ 2 อีก แตถาไมเปนเชนนั้นใหจัดเก็บลงในแฟมขอมูลชั่วคราวแฟมที่ 1

3. ทําซ้ําขอ 2 จนกวาขอมูลจะหมด 4. ตรวจสอบดูวา แฟมขอมูลชั่วคราวแฟมที่ 1 มีขอมูลหรือไม ถาไมมีแสดงวาขอมูลที่จัดเก็บในแฟมขอมูลชั่วคราวแฟมที่ 2 มีการเรียงลําดับเปนท่ีเรียบรอย ใหจบการทํางาน แตถาแฟมขอมูลที่ 1 ยังมีขอมูลอยู ใหรวมแฟมขอมูลทั้ง 2 แฟมเขาดวยกัน ตามวิธีที่ 5 (Merge sort) ดังไดกลาวมาแลว จากนั้นใหกลับไปดําเนินการตามขอ 1. ใหม จนกวาแฟมขอมูลแฟมที่ 1 ไมมีขอมูล

Ex จากขอมูล 2, 9, 6, 15, 14, 3, 7 จงเรียงลําดับขอมูลจากนอยไปหามาก

2 9 6 15 14 3 7

7

6 14 3

2 9 15

7

2 6 9 14 3 15

5

3 7 2 6 9 14 1 2 3 6 7 9 14

2 3 6 7 9 14

Null
Page 21: data structure lesson08

!%!

Algorithm (การเรียงลําดับขอมูลจากนอยไปหามาก)

Procedure External_Merge_Sort (FILE : FileData)

Begin

Do

Begin

No := 0 ;

OpenNewFile (File1, File2);

OpenFile (FileData);

Read (temp from FileData);

Write (temp to File2);

While (Read (Var from FileData) not EOF ) Do

Begin

If (Var ≥ temp) Then Write (Var to File2);

Else

Begin

Write (Var to File1);

No := No+1;

End;

temp := Var;

End;

If (No ≠ 0) Then Mergesort (File1 , File2 , FileData);

End;

While (No >0);

CloseFile (File2);

MoveFile(File2 to FileData);

End.

กิจกรรม 8.2 1. จงเขียนโมดูล (Module) สําหรับการเรียงลําดับขอมูลจากนอยไปหามาก Bubble Sort

Shell Sort Insertion Sort

2. จงแสดงตําแหนง และลักษณะของขอมูล ระหวางการเรียงขอมูลจากนอยไปหามาก ดวยวิธีในขอ 1. โดยชุดขอมูลมีดังนี้

2, 1, 8, 4, 3, 9, 6, 0, 7, 5

Page 22: data structure lesson08

!%#

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 3. จากขอ 2. การเรียงลําดับขอมูลแบบ Selection Sort และ Bubble Sort (ที่สามารถตรวจสอบ

ได) จะมีจํานวนการเรียงลําดับขอมูล แตกตางกันอยางไร 4. ถาขอมูลชุดแรกมีคาดังนี้ 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 ชุดที่ 2 มีคาดังนี้ 5, 1, 3, 5,

5, 99, 6, 2, 1, 7 การเรียงลําดับขอมูลแบบ Bucket Sort จะมีความแตกตางอยางไร 5. แฟมขอมูลมีขอมูล 200,000 คาจงเขียนโมดูล (Module) เพื่อทําการแยกแฟมขอมูลนี้ ออก

เปน 10 แฟมขอมูลยอย 6. จากขอ 5. จงเขียนโมดูล เพื่อทําการเรียงลําดับขอมูลในแฟมขอมูลยอยตาง ๆ โดยการเรียง

ลําดับจากมากไปหานอย และใชวิธีเรียงแบบ Bubble Sort 7. จงเขียนโมดูล เพื่อทําการรวมแฟมขอมูลยอยทั้ง 10 แฟมที่เรียงแลวในขอ 6. แบบ Merge sort 8. จากชุดขอมูล : 2, 1, 8, 4, 3, 9, 6, 0, 7, 5 จงแสดงลักษณะของขอมูลระหวางการเรียง

ลําดับขอมูลจากนอยไปหามากแบบ External Sort 9. งเขียน โมดูล สําหรับการเรียงลําดับขอมูลจากนอยไปหามากแบบ External Sort

ขอมูล ที่จัดเก็บในแถวลําดับ A[Max] จงเขียนโมดูล เพ่ือแสดงขอมูลเหลาน้ี ขอเสนอแนะ

- ควรนําขอตางที่ใหเขียนโมดูล มาเขียนเปนโปรแกรมจริง ๆ เพ่ือฝกฝนหาประสบการณจริง ๆ เน่ืองจากจะมีเหตุตางๆ ที่เราคาดไมถึง ทําใหโปรแกรมไมสามารถทํางานได - ในขอ 3 ความแตกตางที่จะพิจารณา ใหพิจารณาในแงของการใชหนวยความจํา จํานวนครั้ง ในการเรียงลําดับขอมลู ความแตกตางในการเขียน Algorithm