การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/slide/4122303a/%a1%d2%c3%e0... ·...

25
การเรียงข้อมูล

Upload: others

Post on 24-Feb-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

การเรยงขอมล

Page 2: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

• การเรยงล าดบขอมล คอการจดเรยงขอมลใหมการเรยงล าดบตามความตองการ

• ขอมลทท าการจดเรยงอาจเปน ตวเลข ตวอกษร เชน การเรยงล าดบตามรายนามผใชโทรศพท

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

Page 3: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

การเรยงล าดบขอมลในระบบคอมพวเตอร

• จะแบงเปน 2 ลกษณะใหญ ๆ คอ

• การเรยงล าดบขอมลภายใน (Internal sorting)

จะใชกบขอมลทมจ านวนไมใหญกวาเนอทในหนวยความจ า (main memory) โดยจะค านวณและจดเรยงขอมลภายในหนวยความจ าของเครองคอมพวเตอรไดโดยไมตองใชหนวยความจ าส ารอง

Page 4: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

• การเรยงล าดบขอมลภายนอก (External sorting)

ใชกบขอมลทมจ านวนใหญเกนกวาทจะเกบลงในหนวยความจ าไดหมดภายในครงเดยว และจะใชหนวยความจ าภายนอก เชน HardDisk ส าหรบเกบขอมลบางสวนทไดจากการเรยง

การเรยงขอมลภายนอกตองค านงถงเวลาทเสยไปในการโอนถายขอมลไปยง หนวยความจ าภายนอกดวย

Page 5: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

การเลอกใชอลกอรทม

องกอรทม ในการเรยงล าดบมอยมากมาย เชน

Bubble Sort, Selection Sort, Insertion Sort,

Merge sort Quick Sort Heap Sort Radix,

Sort Shell Sort

องกอรทม แตละตวมขอดขอเสยแตกตางกนไป ดงนนการทจะเลอกใช องกอรทม ตองค านงถงปจจย และสภาพแวดลอมดวย

Page 6: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

1. จ านวนขอมล ในการเรยงล าดบขอมลในแตละวธ จะใชในเวลาทตาง ๆ กนขนอยกบจ านวนขอมล เชน ถามจ านวนขอมลมาก เราควรจะใชวธ quick sort มากกวาใชวธ selection sort

2. ขนาดขอมล จะมผลในการบรรจขอมลลงในหนวยความจ า ซงถามขนาดใหญมากจะท าใหเรยงขอมลไดชา ดงนนเราจงนยมใชคยของขอมลแตละอนเปนตวแทนในการจดเรยง

Page 7: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

3. ลกษณะของขอมลเดมกอนจะจดเรยงล าดบ เชน วธ insertion sort ใชไดดกบขอมลทมลกษณะเกอบจะจดเรยงแลว

4. การใชเนอทในหนวยความจ า

5. ลกษณะของการจดเรยง (การเรยงล าดบขอมลภายใน หรอ การเรยงล าดบขอมลภายนอก)

Page 8: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

Bubble Sort

การท างานของ bubble sort เรมตนเราจะน าขอมลตวท 1 และ 2 มาเปรยบเทยบ ถาขอมลตวท 1 มากกวาตวท 2 กจะท าการสลบท แลวคอยเอาขอมลตวท 2 เปรยบเทยบกบตวท 3 ถาหากขอมลตวท 2 มากกวาตวท 3 กท าการสลบทกน แลวจงคอยเปรยบเทยบกบตวท 3 กบตวท 4 เปนเชนนไปเรอย ๆ จนครบทกตว

Page 9: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

Bubble Sort

วธ bubble sort นจะดหรอไมดกขนกบจ านวนและการเรยงล าดบขอมลดวยจากการวเคราะห พบวาวธนจะใชไดดกตอเมอมจ านวนของขอมลนอย ดงนนการเรยงล าดบขอมลวธนจงไมเหมาะส าหรบขอมลจ านวนมาก

Page 10: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

ตวอยาง การเรยงล าดบขอมลแบบ bubble sort จากตวอยาง จะท าการเปรยบเทยบขอมลคทายกอน โดยใหขอมลทมคามากสลบไปอยทางทายของขอมล

4 19 18 6 1 8 12 10รอบการท างานท 1

19 4 18 6 1 8 12 1019 18 4 6 1 8 12 10 19 18 6 4 1 8 12 10 19 18 6 4 1 8 12 10 19 18 6 4 8 1 12 10 19 18 6 4 8 12 1 10 19 18 6 4 8 12 10 1

Page 11: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

รอบการท างานท 219 18 6 4 8 12 10 1 19 18 6 4 8 12 10 1 19 18 6 4 8 12 10 1 19 18 6 8 4 12 10 1 19 18 6 8 12 4 10 1 19 18 6 8 12 10 4 1 19 18 6 8 12 10 4 1

Page 12: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

รอบการท างานท 3 จะไดผลลพธเปน19 18 8 12 10 6 4 1

รอบการท างานท 4 จะไดผลลพธเปน19 18 12 10 8 6 4 1

รอบการท างานท 5 จะไดผลลพธเปน19 18 12 10 8 6 4 1

รอบการท างานท 6 จะไดผลลพธเปน19 18 12 10 8 6 4 1

รอบการท างานท 7 จะไดผลลพธเปน19 18 12 10 8 6 4 1

รอบการท างานท 8 จะไดผลลพธเปน19 18 12 10 8 6 4 1

Page 13: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

void bubble_sort(int data[], int num_elts)

{

int i, j;

char flag = 'T';

for (i=0; flag=='T' && i<num_elts ; i++) {

flag = 'F';

for (j=0; j<num_elts-i-1; j++) {

if (data[j] < data[j+1]) {

swap(data, j, j+1);

flag = 'T';

}

}

}

} /* bubble_sort */

void swap(int data[], int a, int b) { int temp;

temp = data[a];data[a] = data[b];data[b] = temp;

} /* swap */

Page 14: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

Selection Sort

เปนการเรยงล าดบขอมลทคลายกบวธ bubble sort แตดกวาคอมจ านวนครงของการสลบคานอยกวา หลกการมอยวาในแตละรอบ จะท าการคนหาขอมลตวทมคานอยทสดจากขอมลทยงไมไดท าการจดเรยง แลวขอมลตวทมคานอยทสดมาสลบกบขอมลในต าแหนงทรอบนน ๆ

เชนรอบท 1 จะสลบขอมลทมคานอยทสดกบขอมลทอยในต าแหนงท 1 จากนนท าการหาขอมลทมคานอยทสด

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

Page 15: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

ตวอยาง การเรยงล าดบขอมลแบบ selection sort

ขอมลเรมตน

10 12 8 1 6 18 19 4

รอบการท างานท 1

คา 1 มคานอยทสด สลบกบคาในต าแหนงท 1 จะไดขอมล

[ 10 12 8 1 6 18 19 4 ]

สลบกบคาในต าแหนงท 1 จะไดขอมล

[ 1 12 8 10 6 18 19 4 ]

Page 16: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

รอบการท างานท 2

คา 4 มคานอยทสดในชดขอมลใหม

1 [ 12 8 10 6 18 19 4 ]

สลบกบคาในต าแหนงท 2 จะไดขอมล

1 [ 4 8 10 6 18 19 12 ]

Page 17: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

รอบการท างานท 3

คา 6 มคานอยทสดในชดขอมลใหม

1 4 [ 8 10 6 18 19 12 ]

สลบกบคาในต าแหนงท 3 จะไดขอมล

1 4 [6 10 8 18 19 12 ]

Page 18: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

เมอท าเสรจจะได ดงน

1 4 6 8 10 12 18 [ 19 ]

Page 19: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

Selection Sort ดวยภาษาซ

void selection(int elements[], int array_size){int i, j, k;int min, temp;for(i=0;i< array_size;i++){

for(j=i+1;j< array_size;j++){if(a[i]>a[j]){

temp=a[i];a[i]=a[j];a[j]=temp;

}}

}}

Page 20: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

Insertion Sort

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

จากวธการดงกลาว ถาพจารณาขอมลในต าแหนงท i จะเหนวาขอมลจะถกแบงออกเปนสองสวน คอสวนทไดท าการเรยงล าดบแลว กบสวนทเหลอซงยงไมไดท าการเรยง ขนตอนการเรยง จะเปนการเพม(insert) สมาชกตวใหมเขาไปในเซตทมสมาชกทกตวเรยงล าดบอยแลว และท าใหเซตใหมนมสมาชกทกตวเรยงล าดบดวย

Page 21: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

ตวอยางการเรยงล าดบขอมลตอไปน

10 12 8 1 6 18 19 4

เรมตนดวย [ 10 ] ซงมสมาชกตวเดยวเปนเซตทมการเรยงล าดบเรยบรอยแลว

ขอมลเรมตน

[10] 12 8 1 6 18 19 4

Page 22: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

เรยงรอบท 1[10 12] 8 1 6 18 19 4

เรยงรอบท 2[8 10 12] 1 6 18 19 4

เรยงรอบท 3[1 8 10 12] 6 18 19 4

เรยงรอบท 4[1 6 8 10 12] 18 19 4

เรยงรอบท 5[1 6 8 10 12 18] 19 4

Page 23: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

เรยงรอบท 6

[1 6 8 10 12 18 19] 4

เรยงรอบท 7

[1 4 6 8 10 12 18 19]

Page 24: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

void insertion_sort(int data[], int num_elts){

int i, j;

for (i=0; i<num_elts; i++)

for (j=i; (j>0) && (data[j] < data[j-1]); j--)

swap(data, j, j-1);

} /* insertion_sort */

Page 25: การเรียงข้อมูลmathcom.uru.ac.th/~beebrain/Slide/4122303A/%a1%d2%c3%e0... · 2012-01-27 · 3. ลักษณะของข้อมูลเดิมก่อนจะจัดเรียงล

แบบฝกหด

ท าการเรยงขอมลตอไปน จากมากไปนอย ดวยวธ bubble sort, Selection sort และ Insertion sort

a) 9 8 2 11 17 12 3 6 5

b) C D E A P B E W Q Z

C) -1 1 0 2 -4 8 3 4 5 -7 9