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

Post on 24-Feb-2020

4 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

การเรยงขอมล

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

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

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

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

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

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

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

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

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

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

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

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

Bubble Sort, Selection Sort, Insertion Sort,

Merge sort Quick Sort Heap Sort Radix,

Sort Shell Sort

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

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

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

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

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

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

Bubble Sort

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

Bubble Sort

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

ตวอยาง การเรยงล าดบขอมลแบบ 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

รอบการท างานท 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

รอบการท างานท 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

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 */

Selection Sort

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

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

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

ตวอยาง การเรยงล าดบขอมลแบบ 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 ]

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

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

1 [ 12 8 10 6 18 19 4 ]

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

1 [ 4 8 10 6 18 19 12 ]

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

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

1 4 [ 8 10 6 18 19 12 ]

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

1 4 [6 10 8 18 19 12 ]

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

1 4 6 8 10 12 18 [ 19 ]

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;

}}

}}

Insertion Sort

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

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

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

10 12 8 1 6 18 19 4

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

ขอมลเรมตน

[10] 12 8 1 6 18 19 4

เรยงรอบท 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

เรยงรอบท 6

[1 6 8 10 12 18 19] 4

เรยงรอบท 7

[1 4 6 8 10 12 18 19]

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 */

แบบฝกหด

ท าการเรยงขอมลตอไปน จากมากไปนอย ดวยวธ 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

top related