การเรียงลำดับและการค้นหาแบบง่าย (Sort and Search)

Download Report

Transcript การเรียงลำดับและการค้นหาแบบง่าย (Sort and Search)

การเรียงลาดับและการค้ นหาแบบง่ าย
Sorting & Searching
การเรียงลาดับและการค้ นหาแบบง่ าย


Internal Sorting :

Bubble Sort

Insertion Sort

Selection Sort
Searching :

Linear search

Binary search
344-211 Algorithmic Process and Programming , created by Dararat Saelee
2/30
Sorting
ความหมาย
การจัดเรี ยงลาดับ (Sorting) หมายถึงการจัดเรี ยงข้อมูล ให้
เรี ยงลาดับตามเงื่อนไขที่กาหนดไว้ (มากไปน้อย
(descending) หรื อ น้อยไปมาก (ascending))
กรณี ที่ขอ้ มูลในแต่เรคอร์ด (record)มีหลายฟิ ลด์ (field)
เราต้องพิจารณาเลือกฟิ ลด์ ที่สนใจเพื่อใช้ในการ
เรี ยงลาดับ เช่น เรี ยงลาดับตามรหัสศึกษา เป็ นต้น
3/30
Sorting
ประเภทของการจัดเรียงลาดับ
การจัดเรียงภายใน (Internal Sorting)
เป็ นการจัดเรียงลาดับข้ อมูลทีเ่ ก็บอยู่ในหน่ วยความจาของเครื่อง
คอมพิวเตอร์
การจัดเรียงภายนอก (External Sorting)
การจัดเรียงข้ อมูลทีเ่ ก็บอยู่ในสื่ อบันทึกข้ อมูล เช่ น Disk โดยทัว่ ไปการ
เรียงประเภทนี้ มักใช้ กบั ข้ อมูลทีม่ ีจานวนมาก ทีไ่ ม่ สามารถเก็บไว้ ใน
หน่ วยความจาได้ หมด การเรียงในแบบนีจ้ ะต้ องแบ่ งข้ อมูลออกเป็ น
ส่ วนย่ อย แล้วนามาเรียงด้ วยการจัดเรียงแบบภายในก่อน แล้วจึงนาแต่
ละส่ วนย่ อยมารวมกัน
4/30
Sorting
วิธีการจัดเรียงข้ อมูลแบบ Internal Sorting
การจัดเรี ยงแบบบับเบิล (Bubble Sort)
 การจัดเรี ยงแบบแทรก (Insertion Sort)
 การจัดเรี ยงแบบเลือก (Selection Sort)

5/30
Bubble Sort
เป็ นการจัดเรียงโดยการเปรียบเทียบค่ า 2 ค่ าที่ติดกัน ทาต่ อเนื่องกัน
ไปเรื่อย ๆ และตัดสิ นใจว่ าจะสลับตาแหน่ งกันหรือไม่ เช่ น ถ้ า
ต้ องการเรียงลาดับข้ อมูลจาก น้ อยไปมาก
ข้ อมูลทีม่ ีค่ามากต้ องอยู่หลังข้ อมูลทีค่ ่าน้ อย
ดังนั้น สาหรับข้ อมูล 2 ค่ าทีอ่ ยู่ติดกัน
ถ้าข้อมูลตัวหน้ามากกว่าตัวหลัง ให้สลับตาแหน่งกัน
แต่ถา้ ข้อมูลตัวหน้าน้อยกว่าตัวหลัง ไม่ตอ้ งสลับตาแหน่งกัน
ทาเช่นนี้ไปเรื่ อย ๆ จนกว่าการเปรี ยบเทียบข้อมูลตลอดทั้งชุดจะไม่มีการสลับ
ตาแหน่งกันอีก
6/30
Algorithm Bubble_Sort
(to sort unsorted array with size num)
1. for (j2, j<num, jj+1)
for (i2, i≤num, ii+1)
1.1 if (data[i] < data[i-1])
1.1.1 temp  data [i]
1.1.2 data[i]  data[i-1]
1.1.3 data[i-1]  temp
2. end.
7/30
43
22
22
22
22
22
22
22
22
22
22
22
22
22
43
43
43
43
43
43
43
43
17
17
17
17
80
80
80
17
17
17
17
17
17
43
36
36
36
17
17
17
80
36
36
36
36
36
36
43
16
16
36
36
36
36
80
16
16
16
16
16
16
43
29
16
16
16
16
16
80
29
29
29
29
29
29
43
29
29
29
29
29
29
80
80
80
80
80
80
80
Bubble Sort
Pass 1
Pass 2
344-211 Algorithmic Process and Programming , created by Dararat Saelee
8/30
22
17
17
17
17
17
22
22
22
22
36
36
36
16
16
16
16
16
36
29
29
29
29
29
36
43
43
43
43
43
80
80
80
80
80
17
17
17
17
17
16
16
16
22
22
16
16
16
17
17
17
16
16
22
22
22
22
22
22
29
29
29
29
29
29
29
29
36
36
36
36
36
36
36
36
43
43
43
43
43
43
43
43
80
80
80
80
80
80
80
80
Bubble Sort
Pass 3
Pass 4
Pass 5
Pass 6
344-211 Algorithmic Process and Programming , created by Dararat Saelee
9/30
Insertion Sort
เป็ นการจัดเรียงโดยการนาข้ อมูลทีจ่ ะทาการเรียงนั้น ๆ ไป
จัดเรียงทีละตัว โดยการแทรกตัวที่จะเรียงไว้ ในตาแหน่ งที่
เหมาะสมของข้ อมูลทีม่ กี ารจัดเรียงเรียบร้ อยแล้ ว ณ
ตาแหน่ งทีถ่ ูกต้ อง ซึ่ง
เริ่มพิจารณาตั้งแต่ ข้อมูลตาแหน่ งที่ 2 เป็ นต้ นไป
โดยพิจารณาว่ าจะวางข้ อมูลทีก่ าลังพิจารณา ณ ตาแหน่ งใด
เพือ่ ให้ เกิดการเรียงลาดับ จนกระทัง่ หมด
10/30
Algorithm Insertion_Sort
(ascending order)
1. for(i1, i<num, ii+1)
1.1 temp = data[i]
1.2 for(j  i ; j>0 && data[j-1]>temp ; j--)
1.2.1 data[j]  data[j-1];
1.3 data[j]  temp;
2. end
11/30
Insertion Sort
43
22
17
17
16
16
22
43
22
22
17
17
80
80
43
36
22
22
17
17
80
43
36
29
36
36
36
80
43
36
16
16
16
16
80
43
29
29
29
29
29
80
#compare = 17, #move = 14, #pass = 5
What if descending order?
344-211 Algorithmic Process and Programming , created by Dararat Saelee
12/30
Selection sort
เป็ นการจัดเรียงโดยการเริ่มต้ นค้ นหาข้ อมูลตัวที่
น้ อยทีส่ ุ ด (มากทีส่ ุ ด) จากข้ อมูลทีม่ ีอยู่ท้งั หมด แล้ ว
เอามาเก็บไว้ ข้างนอก แล้ วกลับไปหาข้ อมูลตัวที่น้อย
ทีส่ ุ ด (มากทีส่ ุ ด) ในกองต่ อไปจนกว่ าจะหมดกอง
13/30
Algorithm Selection_Sort
(ascending order)
1. for(i  0 ; i<max ; i++)
1.1 min_position  i
1.2 for(j  i+1 ; j<=max ; j++)
1.2.1 if(data[j] < data[min_position])
1.2.1.1 min_position  j
1.3 temp  data[min_position]
1.4 data[min_position]  data[i]
1.5 data[i]  temp
2. end
14/30
Selection Sort (with smallest)
43
16
16
16
16
16
16
22
22
17
17
17
17
17
29 17 36 16
29 17 36 43
29 22 36 43
22 29 36 43
22 29 36 43
22 29 36 43
22 29 36 43
80
80
80
80
80
80
80
#move = 3, #compare = 21, #pass = 6
344-211 Algorithmic Process and Programming , created by Dararat Saelee
15/30
Selection Sort (with largest)
43
43
16
16
16
16
16
22
22
22
22
22
17
17
80
29
29
29
17
22
22
17
17
17
17
29
29
29
36
36
36
36
36
36
36
16
16
43
43
43
43
43
29
80
80
80
80
80
80
#move = 4, #compare = 21, #pass = 6
344-211 Algorithmic Process and Programming , created by Dararat Saelee
16/30
Searching
คือการค้ นหาข้ อมูล จากชุดข้ อมูล ซึ่งผลลัพธ์
จะต้ องบอกได้ ว่าค้ นหาเจอหรือค้ นหาไม่ เจอ
2 search methods :
Linear/Sequential search
Binary search
17/30
Linear/Sequential Search
เหมาะกับการค้นหาข้อมูลจากชุดข้อมูลขนาดเล็ก
โดยเริ่ มเปรี ยบเทียบข้อมูลที่ตอ้ งการค้นหา (search
key) กับข้อมูลตัวแรก จนกว่าจะเจอข้อมูลที่ตอ้ งการ
18/30
Linear/Sequential Search
กรณีข้อมูลไม่ มกี ารเรียงลาดับ: ให้คน้ หาตั้งแต่
ข้อมูลตัวแรกจนถึงตัวสุ ดท้ายของชุดข้อมูล
กรณีข้อมูลถูกเรียงลาดับจากน้ อยไปมาก:
ให้
ค้นหาตั้งแต่ขอ้ มูลตัวแรกจนถึงตัวสุ ดท้ายที่มีค่าน้อย
กว่าข้อมูลที่ตอ้ งการค้นหา
19/30
Linear/Sequential Search
search key = 25 , (unsuccessful)
43
22
17
36
16
16
17
22
36
43
43
22
17
36
16
16
17
22
36
43
43
22
17
36
16
16
17
22
36
43
43
22
17
36
16
16
17
22
36
43
43
22
17
36
16
Sorted data
What if descending
sorted data?
Unsorted data
344-211 Algorithmic Process and Programming , created by Dararat Saelee
20/30
Binary Search
ใช้ ค้นหาข้ อมูลบนชุดข้ อมูลทีม่ ีการเรียงลาดับเรียบร้ อยแล้ ว มี
ขั้นตอนดังนี้
1. หาค่าข้อมูลที่อยูต่ รงกลางชุดข้อมูล (middle value) ซึ่ง
เป็ นค่าที่อยูอ่ ยู่ ณ ตาแหน่ง  N  เมื่อ N คือจานวนข้อมูล
2
ทั้งหมด
2. เปรี ยบเทียบค่าที่อยูต่ รงกลาง (middle value) กับค่าที่
ต้องการค้นหา (search key)
21/30
Binary Search
3. ถ้าไม่ตรงกัน กรณี ขอ้ มูลเรี ยงลาดับจากน้อยไปมาก ให้
ดาเนินการดังนี้
3.1 ถ้า search key < middle value
concentrate on the first half
data and do (1) - (3)
3.2 ถ้า search key > middle value
concentrate on the second half
data and do (1) - (3)
22/30
Binary Search
12
15
18
23
26
Search key = 17
37
39
41
43
48
mid
12
15
18
23
26
37
39
41
43
48
18
23
26
37
39
41
43
48
23
26
37
39
41
43
48
mid
12
15
mid
12
15
18
344-211 Algorithmic Process and Programming , created by Dararat Saelee
23/30
Binary Search
12
15
18
23
26
Search key = 37
37
39
41
43
48
37
39
41
43
48
43
48
mid
12
15
18
23
26
mid
12
15
18
23
26
37
39
41
mid
344-211 Algorithmic Process and Programming , created by Dararat Saelee
24/30

Exercise 1
Ascending Sort
23 78 45 8 32 99 19 56

Searching
1) key = 32
2) key = 70
344-211 Algorithmic Process and Programming , created by Dararat Saelee
25/30

Exercise 2
Descending Sort
90 31 9 25 43 11 68 57 88

Searching
1) key = 89
2) key = 25
What if adds 18 at the end?
344-211 Algorithmic Process and Programming , created by Dararat Saelee
26/30
Have a courage to make
your dream come true …
344-211 Algorithmic Process and Programming , created by Dararat Saelee
27