ดาวน์โหลดงานนำเสนอ
งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ
1
Week 12 Engineering Problem 2
2
Outline ทบทวนการใช้อาเรย์ ปัญหาการจัดเรียงข้อมูล
อัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)แบบ pseudo-code ตัวอย่างการทำงานของอัลกอริทึม อัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) ในภาษา C
3
การประกาศอาเรย์ในภาษา C
type name[elements]; name คือ ชื่ออาเรย์ type หมายถึง ชนิด อาทิเช่น int, float, ฯลฯ และ elements ระบุจำนวนสมาชิกในอาเรย์ ตัวอย่าง int billy[5]; float c[12], x[27];
4
ปัญหาในการจัดเรียงข้อมูล
ปัญหาในการจัดเรียงข้อมูลสามารถกำหนดได้ดังนี้ Input: อาเรย์ A = <a1,a2,a3,…,an> ที่เก็บตัวเลขจำนวนเต็มจำนวนทั้งหมด n ตัว Output: อาเรย์ A = <a’1,a’2,a’3,…,a’n> ที่เก็บตัวเลขจำนวนเต็มจำนวนทั้งหมด n ตัว โดยที่ a’1≤ a’2 ≤ a’3 ≤… ≤ a’n การแก้ปัญหานี้สามารถทำได้หลายวิธี แต่วิธีที่เราจะศึกษามีชื่อเรียกว่าอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) ข้อมูลนำเข้าเป็นตัวเลขจำนวน n ตัว ข้อมูลนำออกเป็นตัวเลข n ตัวเดิมที่เรียงจากน้อยไปมาก
5
อัลกอริทึมการจัดเรียงข้อมูลแบบแทรก
(Insertion Sort) อธิบายการทำงานโดยใช้ pseudo-code อธิบายการทำงานโดยใช้ pseudo-code
6
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 สมมติว่ามีตัวเลขอยู่ห้าตัวที่ต้องการจะจัดเรียงจากน้อยไปมากโดยใช้อัลกอริทึมจัดเรียงแบบแทรก สมมติว่ามีตัวเลขอยู่ห้าตัวที่ต้องการจะจัดเรียงจากน้อยไปมากโดยใช้อัลกอริทึมจัดเรียงแบบแทรก
7
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 ตัวเลขสีแดงคือตัวเลขที่ต้องการจะเปรียบเทียบกับตัวเลขข้างหน้าเพื่อหาตำแหน่งที่ถูกต้อง ตัวเลขสีแดงคือตัวเลขที่ต้องการจะเปรียบเทียบกับตัวเลขข้างหน้าเพื่อหาตำแหน่งที่ถูกต้อง
8
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6, ,4,2,6,7 เนื่องจาก 4 มากกว่า 1 จึงไม่ต้องมีการย้ายตำแหน่งของ 4 เนื่องจาก 4 มากกว่า 1 จึงไม่ต้องมีการย้ายตำแหน่งของ 4
9
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6, ,4,2,6,7 ตัวเลขถัดมาที่เราจะหาตำแหน่งที่ถูกต้องคือ 2 ตัวเลขถัดมาที่เราจะหาตำแหน่งที่ถูกต้องคือ 2
10
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6, ,4,2,6,7
11
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6, ,4,2,6, ,2,4,6,7 เนื่องจาก 2 น้อยกว่า 4 แสดงว่า 2 ต้องสลับตำแหน่งกับ 4 เนื่องจาก 2 น้อยกว่า 4 แสดงว่า 2 ต้องสลับตำแหน่งกับ 4
12
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 1,4,2,6,7 1,2,4,6,7 1,2,4,6,7 นำ 2 มาเปรียบเทียบกับตัวเลขข้างหน้าคือ 1 ในที่นี้ 2 มีค่ามากกว่า 1 เลข 2 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว นำ 2 มาเปรียบเทียบกับตัวเลขข้างหน้าคือ 1 ในที่นี้ 2 มีค่ามากกว่า 1 เลข 2 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว
13
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 1,4,2,6,7 1,2,4,6,7 1,2,4,6,7 พิจารณาตัวเลขถัดมาคือเลข 6 นำเลข 6 ไปเปรียบเทียบกับตัวเลขข้างหน้าคือ เลข 4 พิจารณาตัวเลขถัดมาคือเลข 6 นำเลข 6 ไปเปรียบเทียบกับตัวเลขข้างหน้าคือ เลข 4
14
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 1,4,2,6,7 1,2,4,6,7 1,2,4,6,7 1,2,4,6,7 เนื่องจากเลข 6 มีค่ามากกว่าเลข 4 แล้ว เลข 6 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว ไม่ต้องสับเปลี่ยนตำแหน่งกับเลข 4 เนื่องจากเลข 6 มีค่ามากกว่าเลข 4 แล้ว เลข 6 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว ไม่ต้องสับเปลี่ยนตำแหน่งกับเลข 4
15
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 1,4,2,6,7 1,2,4,6,7 1,2,4,6,7 1,2,4,6,7 นำตัวเลขตัวถัดไปคือเลข 7 มาเปรียบเทียบกับตัวเลขข้างหน้าคือ เลข 6 นำตัวเลขตัวถัดไปคือเลข 7 มาเปรียบเทียบกับตัวเลขข้างหน้าคือ เลข 6
16
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 1,4,2,6,7 1,2,4,6,7 1,2,4,6,7 1,2,4,6,7 เนื่องจากเลข 7 มีค่ามากกว่าเลข 6 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว ไม่ต้องมีการสลับที่ เนื่องจากเลข 7 มีค่ามากกว่าเลข 6 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว ไม่ต้องมีการสลับที่
17
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)
1,4,2,6,7 1,4,2,6,7 1,2,4,6,7 1,2,4,6,7 1,2,4,6,7 เนื่องจากตัวเลข 7 เป็นตัวเลขตัวสุดท้าย การจัดเรียงจึงสิ้นสุดลงโดยตัวเลขทั้ง 5 ตัวอยู่ในลำดับจากน้อยไปมากตามที่ต้องการ เนื่องจากเลข 7 มีค่ามากกว่าเลข 6 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว ไม่ต้องมีการสลับที่
18
อัลกอริทึมการจัดเรียงข้อมูลแบบแทรกใน C
สังเกตว่าโค๊ดนี้เหมือนโค๊ดเทียมเป๊ะ เราต้องประกาศขนาดของ array A ให้เกินไว้หนึ่งค่าเพราะเราจะใช้ index ที่อยู่ในช่วง 1 ถึง 20
19
ตัวอย่างการทำงานของโปรแกรม
20
การจัดเรียงข้อมูลที่เป็นสตริง
การจัดเรียงข้อมูลแบบแทรกสามารถใช้กับการจัดเรียงข้อมูลที่ไม่ใช่ตัวเลขได้ด้วย ขอเพียงแต่ให้มีตัวเปรียบเทียบที่บอกว่าข้อมูลที่ให้มาสองอัน = > หรือ < กัน เช่น เราสามารถจัดเรียงข้อมูลสตริงได้ เพราะเราสามารถใช้ฟังก์ชัน strcmp ซึ่งมีรูปแบบ int strcmp(char *string1, char *string2);
21
การเปรียบเทียบสตริงโดยใช้ strcmp
จะต้องใช้งาน string.h โดยใช้คำสั่ง #include <string.h> การใช้งาน จะต้องใส่เครื่องหมาย & หน้าชื่อตัวแปรที่เก็บตัวอักษรที่ต้องการเปรียบเทียบ ผลการทำงาน ถ้า string1<string2, ค่าที่ได้จะน้อยกว่า 0 ถ้า string1>string2, ค่าที่ได้จะมากกว่า 0 ถ้า string1==string2, ค่าที่ได้จะเท่ากับ 0
22
อย่างการใช้งานstrcmp
char letter1 = ‘c’ char letter2 = ‘k’ int mycmp; mycmp = strcmp(&letter1, &letter) printf(“%d\n”, mycmp); ค่าที่ได้ออกมาจะเป็น ลบ เพราะอักษร c มาก่อน อักษร k * ในการเทียบอักขระ (character) ตัวอักษรเดียว สามารถใช้ ==, >, < ได้ แต่ในแบบฝึกหัดให้ทดลองใช้คำสั่ง strcmp ด้วย
23
ตัวอย่างโปรแกรมที่ใช้ strcmp
ผลการทำงาน
งานนำเสนอที่คล้ายกัน
© 2024 SlidePlayer.in.th Inc.
All rights reserved.