การเรียงลำดับและการค้นหาแบบง่าย 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
Sorting ความหมาย การจัดเรียงลำดับ (Sorting) หมายถึงการจัดเรียงข้อมูล ให้เรียงลำดับตามเงื่อนไขที่กำหนดไว้ (มากไปน้อย (descending) หรือ น้อยไปมาก (ascending)) กรณีที่ข้อมูลในแต่เรคอร์ด (record)มีหลายฟิลด์ (field) เราต้องพิจารณาเลือกฟิลด์ ที่สนใจเพื่อใช้ในการเรียงลำดับ เช่น เรียงลำดับตามรหัสศึกษา เป็นต้น
Sorting ประเภทของการจัดเรียงลำดับ การจัดเรียงภายใน (Internal Sorting) เป็นการจัดเรียงลำดับข้อมูลที่เก็บอยู่ในหน่วยความจำของเครื่องคอมพิวเตอร์ การจัดเรียงภายนอก (External Sorting) การจัดเรียงข้อมูลที่เก็บอยู่ในสื่อบันทึกข้อมูล เช่น Disk โดยทั่วไปการเรียงประเภทนี้ มักใช้กับข้อมูลที่มีจำนวนมาก ที่ไม่สามารถเก็บไว้ในหน่วยความจำได้หมด การเรียงในแบบนี้จะต้องแบ่งข้อมูลออกเป็นส่วนย่อย แล้วนำมาเรียงด้วยการจัดเรียงแบบภายในก่อน แล้วจึงนำแต่ละส่วนย่อยมารวมกัน
Sorting วิธีการจัดเรียงข้อมูลแบบ Internal Sorting การจัดเรียงแบบบับเบิล (Bubble Sort) การจัดเรียงแบบแทรก (Insertion Sort) การจัดเรียงแบบเลือก (Selection Sort)
Bubble Sort เป็นการจัดเรียงโดยการเปรียบเทียบค่า 2 ค่าที่ติดกัน ทำต่อเนื่องกันไปเรื่อย ๆ และตัดสินใจว่าจะสลับตำแหน่งกันหรือไม่ เช่น ถ้าต้องการเรียงลำดับข้อมูลจาก น้อยไปมาก ข้อมูลที่มีค่ามากต้องอยู่หลังข้อมูลที่ค่าน้อย ดังนั้น สำหรับข้อมูล 2 ค่าที่อยู่ติดกัน ถ้าข้อมูลตัวหน้ามากกว่าตัวหลัง ให้สลับตำแหน่งกัน แต่ถ้าข้อมูลตัวหน้าน้อยกว่าตัวหลัง ไม่ต้องสลับตำแหน่งกัน ทำเช่นนี้ไปเรื่อย ๆ จนกว่าการเปรียบเทียบข้อมูลตลอดทั้งชุดจะไม่มีการสลับตำแหน่งกันอีก
Algorithm Bubble_Sort (to sort unsorted array with size num) 1. for (j2, j<num, jj+1) for (i2, i≤num, ii+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.
43 22 80 17 36 16 29 22 43 80 17 36 16 29 22 43 17 80 36 16 29 22 43 17 36 80 16 29 22 43 17 36 16 80 29 22 43 17 36 16 29 80 22 17 43 36 16 29 80 22 17 36 43 16 29 80 22 17 36 16 43 29 80 22 17 36 16 29 43 80 Bubble Sort Pass 1 Pass 2 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Bubble Sort Pass 3 Pass 4 Pass 5 Pass 6 22 17 36 16 29 43 80 22 17 36 16 29 43 80 17 22 36 16 29 43 80 17 22 16 36 29 43 80 17 22 16 29 36 43 80 17 16 22 29 36 43 80 16 17 22 29 36 43 80 Bubble Sort Pass 3 Pass 4 Pass 5 Pass 6 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Insertion Sort เป็นการจัดเรียงโดยการนำข้อมูลที่จะทำการเรียงนั้น ๆ ไปจัดเรียงทีละตัว โดยการแทรกตัวที่จะเรียงไว้ในตำแหน่งที่เหมาะสมของข้อมูลที่มีการจัดเรียงเรียบร้อยแล้ว ณ ตำแหน่งที่ถูกต้อง ซึ่ง เริ่มพิจารณาตั้งแต่ข้อมูลตำแหน่งที่ 2 เป็นต้นไป โดยพิจารณาว่าจะวางข้อมูลที่กำลังพิจารณา ณ ตำแหน่งใดเพื่อให้เกิดการเรียงลำดับ จนกระทั่งหมด
Algorithm Insertion_Sort (ascending order) 1. for(i1, i<num, ii+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
Insertion Sort 43 22 80 17 36 16 29 22 43 80 17 36 16 29 17 22 43 80 36 16 29 17 22 36 43 80 16 29 16 17 22 36 43 80 29 16 17 22 29 36 43 80 #compare = 17, #move = 14, #pass = 5 What if descending order? 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Selection sort เป็นการจัดเรียงโดยการเริ่มต้นค้นหาข้อมูลตัวที่น้อยที่สุด (มากที่สุด) จากข้อมูลที่มีอยู่ทั้งหมด แล้วเอามาเก็บไว้ข้างนอก แล้วกลับไปหาข้อมูลตัวที่น้อยที่สุด (มากที่สุด) ในกองต่อไปจนกว่าจะหมดกอง
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
Selection Sort (with smallest) 43 22 29 17 36 16 80 16 22 29 17 36 43 80 16 17 29 22 36 43 80 16 17 22 29 36 43 80 #move = 3, #compare = 21, #pass = 6 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Selection Sort (with largest) 43 22 80 17 36 16 29 43 22 29 17 36 16 80 16 22 29 17 36 43 80 16 22 17 29 36 43 80 16 17 22 29 36 43 80 #move = 4, #compare = 21, #pass = 6 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Searching คือการค้นหาข้อมูล จากชุดข้อมูล ซึ่งผลลัพธ์ จะต้องบอกได้ว่าค้นหาเจอหรือค้นหาไม่เจอ 2 search methods : Linear/Sequential search Binary search
Linear/Sequential Search เหมาะกับการค้นหาข้อมูลจากชุดข้อมูลขนาดเล็ก โดยเริ่มเปรียบเทียบข้อมูลที่ต้องการค้นหา (search key) กับข้อมูลตัวแรก จนกว่าจะเจอข้อมูลที่ต้องการ
Linear/Sequential Search กรณีข้อมูลไม่มีการเรียงลำดับ: ให้ค้นหาตั้งแต่ข้อมูลตัวแรกจนถึงตัวสุดท้ายของชุดข้อมูล กรณีข้อมูลถูกเรียงลำดับจากน้อยไปมาก: ให้ค้นหาตั้งแต่ข้อมูลตัวแรกจนถึงตัวสุดท้ายที่มีค่าน้อยกว่าข้อมูลที่ต้องการค้นหา
Linear/Sequential Search search key = 25 , (unsuccessful) 43 22 17 36 16 16 17 22 36 43 Sorted data What if descending sorted data? Unsorted data 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Binary Search ใช้ค้นหาข้อมูลบนชุดข้อมูลที่มีการเรียงลำดับเรียบร้อยแล้ว มีขั้นตอนดังนี้ 1. หาค่าข้อมูลที่อยู่ตรงกลางชุดข้อมูล (middle value) ซึ่งเป็นค่าที่อยู่อยู่ ณ ตำแหน่ง เมื่อ N คือจำนวนข้อมูลทั้งหมด 2. เปรียบเทียบค่าที่อยู่ตรงกลาง (middle value) กับค่าที่ต้องการค้นหา (search key)
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
Binary Search Search key = 17 12 15 18 23 26 37 39 41 43 48 mid mid 12 15 18 23 26 37 39 41 43 48 mid mid mid 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Binary Search Search key = 37 12 15 18 23 26 37 39 41 43 48 mid mid 12 15 18 23 26 37 39 41 43 48 mid mid mid 344-211 Algorithmic Process and Programming , created by Dararat Saelee
Exercise 1 Ascending Sort Searching 23 78 45 8 32 99 19 56 1) key = 32 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
Exercise 2 Descending Sort 90 31 9 25 43 11 68 57 88 Searching 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
Have a courage to make your dream come true … 344-211 Algorithmic Process and Programming , created by Dararat Saelee