32
การจัดเรียงข้อมูล (Sorting) วิชา COSC2202 โครงสร้างข้อมูล (Data Structure)

การจัดเรียงข้อมูล (sorting)

  • Upload
    tumetr

  • View
    222

  • Download
    0

Embed Size (px)

Citation preview

Page 1: การจัดเรียงข้อมูล (sorting)

การจดเร ยงข อมล (Sorting)

วชา COSC2202 โครงสรางขอมล (Data Structure)

Page 2: การจัดเรียงข้อมูล (sorting)

การจ ดเร ยงข อม ล (Sorting) การจดเรยงลำาดบ (Sorting) หมายถง การจดเรยงขอมลให

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

คอมพวเตอร จะแบงเปน 2 ลกษณะใหญ ๆ คอ1. การเร ยงล ำาด บขอม ลภายใน (Internal sorting)

ใชกบขอมลทมจำานวนไมใหญกวาเนอทในหนวยความจำา (main memory)

ไมตองใชหนวยความจำาสำารอง เชน ดสก, เทป เปนตน2. การเร ยงล ำาด บขอม ลภายนอก (External sorting)

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

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

ลำาดบขอมลในสวนตอไป

Page 3: การจัดเรียงข้อมูล (sorting)

ประเภทของการเรยงลำาดบขอมล

หยบแทรก เลอกขอมลทตองการมา

แทรก

สลบทขอมลทไมถกตำาแหนง

Sort Order1. Ascending Order เรยง

จากนอย --> มาก2. Descending Order เรยง

จากมาก --> นอย

Page 4: การจัดเรียงข้อมูล (sorting)

Insertion Sort การจดเรยงแบบแทรก คอ การเรยงขอมลโดยนำา

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

ของขอมลทมการจดเรยงเรยบรอยแลว ณ ตำาแหนงทถกตอง

Page 5: การจัดเรียงข้อมูล (sorting)

Insertion Sortขนตอน เปรยบเทยบคากบตำาแหนงถด

ไปแทน สลบตำาแหนงใหอยในตำาแหนง

ทเหมาะสม

Page 6: การจัดเรียงข้อมูล (sorting)

Shell Sort การจดเรยงแบบเชลล เปนการจดเรยงทอาศยเทคนค

การแบงขอมลออกเปนกลมยอยหลายๆ กลม แลวจด เรยงขอมลในกลมยอยๆ นน หลงจากนนกใหรวม

กลมยอยๆ ใหใหญขนเรอยๆ ขนสดทายใหจดเรยงขอมลทงหมดนนอกครง

Page 7: การจัดเรียงข้อมูล (sorting)

Shell Sort ตวอยาง กำาหนด Segment เมอ K=3

Page 8: การจัดเรียงข้อมูล (sorting)

Shell Sortขนตอน โดยทวไปการเลอกคา K ตวแรกมกจะเลอกใชคา

เทากบครงหนงของขอมล เชน ขอมลม 10 ตว K = n/2 = 10/2 = 5

เรยงขอมลทกตวใหเสรจสน แลวกำาหนดคา K ใหม( โดยทวไปจะเปนครงหนงของคา K ตวแรก เชน K1 = 5; K2 = 5/2 = 2)

ถา K > 1 ใหทำาซำา จนกระทงเหลอขอมลกลมเดยวถา K = 1 ใหเรยงลำาดบตามปกต

Page 9: การจัดเรียงข้อมูล (sorting)

Shell Sort ตวอย างการทำางานในแตละรอบของ K

Page 10: การจัดเรียงข้อมูล (sorting)

Shell Sort

Page 11: การจัดเรียงข้อมูล (sorting)

Shell Sort

Page 12: การจัดเรียงข้อมูล (sorting)

Selection Sort การจดเรยงแบบเลอก เปนวธการเรยงขอมลโดยจะ

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

ขอมลตวทนอยทสดในกองตอไปสลบทกบขอมลจนกวาจะหมดกอง

Page 13: การจัดเรียงข้อมูล (sorting)

Selection Sortขนตอน คนหาตวเลขทมคานอย/มาก

ทสดตงแตตวแรกไปจนถงตวสดทาย

สลบตำาแหนงตวเลขทมคานอย/มากทสด

Page 14: การจัดเรียงข้อมูล (sorting)

Heap Sort

Page 15: การจัดเรียงข้อมูล (sorting)

Heap Sort

Page 16: การจัดเรียงข้อมูล (sorting)

Bubble Sort การจดเรยงแบบบบเบล เปนการจดเรยงโดยการ

เปรยบเทยบคา 2 คาทตดกน ทำาตอเนองกนไป เรอยๆ

Page 17: การจัดเรียงข้อมูล (sorting)

Bubble Sort

Page 18: การจัดเรียงข้อมูล (sorting)

Quick Sort การจดเรยงแบบควกซ ใชหลกการ divide-and-

conquer อาศยการจดแบงขอมลทงหมดออกเปน 2 กลม โดยกลมแรกจะเปนกลมของขอมลทมคานอย

กวาคากลางทกำาหนด และสวนทสองเปนกลมของ ขอมลทมคามากกวาคากลางทกำาหนด หลงจากนน

แบงขอมลแตละสวนออกเปน 2 สวนเชนเดม แบงไปเรอยๆจนไมสามารถแบงไดกจะไดขอมลทเรยงกน

Page 19: การจัดเรียงข้อมูล (sorting)

Quick Sortขนตอน มการเลอกขอมลตวหนง

เรยกวา Pivot ทใชเปนตวแบงแยกชดขอมลทเราม

ออกเปนสวน คอ ขอมลทม คานอยกวา Pivot และ

ขอมลทมคามากกวา Pivot แบงขอมลไปเรอยๆ เรยงขอมลแตละสวนยอยๆ

>

>

>

Page 20: การจัดเรียงข้อมูล (sorting)

Quick Sort การแบงสวนขอมลใชหลกการ Picking the pivot คอการ กำาหนดคาสมมตทอยตรงกลาง โดยจะเลอกขอมลท อยตรงกลางของขอมลทงหมด มาใชเปนคากงกลาง

ดงนน ขอมลอนๆทมคามากกวาคาทอยตรงกลางจะ อยกลมทางขวามอ คาทนอยกวาจะอยกลมทางซาย

มอ

Page 21: การจัดเรียงข้อมูล (sorting)

Quick Sort

>

ถาขอมล < Pivot แลว

SortLeft=SortLeft+1

สลบ Pivot กบ

ขอมลตวท SortLeft-1

ถาขอมล >= Pivot แลว

SortRight=SortRight-1

Page 22: การจัดเรียงข้อมูล (sorting)

Quick Sort

Page 23: การจัดเรียงข้อมูล (sorting)

Merge Sort การเรยงแบบผสาน (Merge Sort ) -- การทำา

Merge Sort ใชหลกการ divide-and-conquer เหมอนกบ Quick Sort มลกษณะของการแบงขอมล

ออกเปนสวนๆ แตกระบวนการเรยงขอมลนนจะแตกตางไปจาก Quick sort Quick sort กระทำาการ

สลบขอมลไปพรอมกบการแบงขอมลออกเปนสวนๆ แต merge sort น กระทำาการแบงขอมลออกเปน

สวนๆกอน แลวคอยเรยงขอมลในสวนยอย จากนน นำาเอาขอมลสวนยอยทเรยงไวแลว มารวมกนและ

เรยงไปในเวลาเดยวกน อลกอรธมจะเรยงพรอมกบ ผสานขอมล เขาดวยกนจนกระทงขอมลทกตวรวม

กนกลายเปนขอมลเดยวอกครง

Page 24: การจัดเรียงข้อมูล (sorting)

Merge Sort

แบงขอมลออกเปนขอมลยอยๆ

จดเรยงขอมลยอย

นำาขอมลยอยๆ นนมารวมกนใหเปนขอมลเดยว

Page 25: การจัดเรียงข้อมูล (sorting)

Radix Sort การเรยงลำาดบแบบฐาน -- เปนการเรยงลำาดบโดยการพจารณา

ขอมลทละหลก1. เรมพจารณาจากหลกทมคานอยทสดกอน นนคอถาขอมล

เปนเลขจำานวนเตมจะพจารณาหลกหนวยกอน2. การจดเรยงจะนำาขอมลทละตว แลวนำาไปเกบไวทซงจดไว

สำาหรบคานน เปนกลมๆ ตามลำาดบการเขามา3. ในแตละรอบเมอจดกลมเรยบรอยแลว ใหรวบรวมขอมลจาก

ทกกลมเขาดวยกน โดยเรมเรยงจากกลมทมคานอยทสดกอน แลวเรยงไปเรอยๆ จนหมดทกกลม

4. ในรอบตอไปนำาขอมลทงหมดทไดจดเรยงในหลกหนวย เรยบรอยแลวมาพจารณาจดเรยงในหลกสบตอไป ทำาไป

เรอยๆ จนกระทงครบทกหลก

Page 26: การจัดเรียงข้อมูล (sorting)

Radix Sort

ใชกบขอมล Linked List

Page 27: การจัดเรียงข้อมูล (sorting)

การวดประสทธภาพ

Big-O

เปนตวบอกระดบความซบ

ซอนของอลกอรธมนน ซง

จะแสดงใหเหน

ประสทธภาพของอลกอรธ

มนน

Number of Loops

n Straight InsertionStraight Selection

Bubble

Shell HeapQuick

25 625 55 116100 10,000 316 664500 250,000 2,364 4,482

1,000 1,000,000 5,623 9,9652,000 4,000,000 13,374 10,985

Page 28: การจัดเรียงข้อมูล (sorting)

การวดประสทธภาพ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 */

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

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

} /* swap */

Big-O = n2

Page 29: การจัดเรียงข้อมูล (sorting)

การวดประสทธภาพvoid selection_sort(int data[], int num_elts){

int i, j, lowindex;

for (i=0; i<num_elts; i++) /* Select i'th record */{ lowindex = i; /* Remember its index */

for (j=num_elts-1; j>i; j--) /* Find the least value */ if (data[j] < data[lowindex])

lowindex = j; /* Put it in place */ if (i != lowindex) /* To reduce swap() operation */

swap(data, i, lowindex);}

} /* selection_sort */

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

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

} /* swap */

Big-O = n2

Page 30: การจัดเรียงข้อมูล (sorting)

การวดประสทธภาพvoid bubble_sort(int data[], int num_elts){

int i, j;

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

if (data[j] < data[j-1]) swap(data, j, j-1);

} /* bubble_sort */

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

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

} /* swap */

Big-O = n2

Page 31: การจัดเรียงข้อมูล (sorting)

การวดประสทธภาพ

least significant digit (LSD) most significant digit (MSD)

k, the size of each key s, the chunk size used by the implementation.

Page 32: การจัดเรียงข้อมูล (sorting)

การวดประสทธภาพ