Week 12 Engineering Problem 2
Outline ทบทวนการใช้อาเรย์ ปัญหาการจัดเรียงข้อมูล อัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort)แบบ pseudo-code ตัวอย่างการทำงานของอัลกอริทึม อัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) ในภาษา C
การประกาศอาเรย์ในภาษา C type name[elements]; name คือ ชื่ออาเรย์ type หมายถึง ชนิด อาทิเช่น int, float, ฯลฯ และ elements ระบุจำนวนสมาชิกในอาเรย์ ตัวอย่าง int billy[5]; float c[12], x[27];
ปัญหาในการจัดเรียงข้อมูล ปัญหาในการจัดเรียงข้อมูลสามารถกำหนดได้ดังนี้ 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 ตัวเดิมที่เรียงจากน้อยไปมาก
อัลกอริทึมการจัดเรียงข้อมูลแบบแทรก (Insertion Sort) อธิบายการทำงานโดยใช้ pseudo-code อธิบายการทำงานโดยใช้ pseudo-code
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) 1,4,2,6,7 สมมติว่ามีตัวเลขอยู่ห้าตัวที่ต้องการจะจัดเรียงจากน้อยไปมากโดยใช้อัลกอริทึมจัดเรียงแบบแทรก สมมติว่ามีตัวเลขอยู่ห้าตัวที่ต้องการจะจัดเรียงจากน้อยไปมากโดยใช้อัลกอริทึมจัดเรียงแบบแทรก
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) 1,4,2,6,7 ตัวเลขสีแดงคือตัวเลขที่ต้องการจะเปรียบเทียบกับตัวเลขข้างหน้าเพื่อหาตำแหน่งที่ถูกต้อง ตัวเลขสีแดงคือตัวเลขที่ต้องการจะเปรียบเทียบกับตัวเลขข้างหน้าเพื่อหาตำแหน่งที่ถูกต้อง
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) 1,4,2,6,7 1,4,2,6,7 เนื่องจาก 4 มากกว่า 1 จึงไม่ต้องมีการย้ายตำแหน่งของ 4 เนื่องจาก 4 มากกว่า 1 จึงไม่ต้องมีการย้ายตำแหน่งของ 4
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) 1,4,2,6,7 1,4,2,6,7 ตัวเลขถัดมาที่เราจะหาตำแหน่งที่ถูกต้องคือ 2 ตัวเลขถัดมาที่เราจะหาตำแหน่งที่ถูกต้องคือ 2
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) 1,4,2,6,7 1,4,2,6,7
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (Insertion Sort) 1,4,2,6,7 1,4,2,6,7 1,2,4,6,7 เนื่องจาก 2 น้อยกว่า 4 แสดงว่า 2 ต้องสลับตำแหน่งกับ 4 เนื่องจาก 2 น้อยกว่า 4 แสดงว่า 2 ต้องสลับตำแหน่งกับ 4
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (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 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (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
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (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
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (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
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (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 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว ไม่ต้องมีการสลับที่
ตัวอย่างการทำงานของอัลกอริทึมการจัดเรียงแบบแทรก (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 จึงอยู่ในตำแหน่งที่ถูกต้องแล้ว ไม่ต้องมีการสลับที่
อัลกอริทึมการจัดเรียงข้อมูลแบบแทรกใน C สังเกตว่าโค๊ดนี้เหมือนโค๊ดเทียมเป๊ะ เราต้องประกาศขนาดของ array A ให้เกินไว้หนึ่งค่าเพราะเราจะใช้ index ที่อยู่ในช่วง 1 ถึง 20
ตัวอย่างการทำงานของโปรแกรม
การจัดเรียงข้อมูลที่เป็นสตริง การจัดเรียงข้อมูลแบบแทรกสามารถใช้กับการจัดเรียงข้อมูลที่ไม่ใช่ตัวเลขได้ด้วย ขอเพียงแต่ให้มีตัวเปรียบเทียบที่บอกว่าข้อมูลที่ให้มาสองอัน = > หรือ < กัน เช่น เราสามารถจัดเรียงข้อมูลสตริงได้ เพราะเราสามารถใช้ฟังก์ชัน strcmp ซึ่งมีรูปแบบ int strcmp(char *string1, char *string2);
การเปรียบเทียบสตริงโดยใช้ strcmp จะต้องใช้งาน string.h โดยใช้คำสั่ง #include <string.h> การใช้งาน จะต้องใส่เครื่องหมาย & หน้าชื่อตัวแปรที่เก็บตัวอักษรที่ต้องการเปรียบเทียบ ผลการทำงาน ถ้า string1<string2, ค่าที่ได้จะน้อยกว่า 0 ถ้า string1>string2, ค่าที่ได้จะมากกว่า 0 ถ้า string1==string2, ค่าที่ได้จะเท่ากับ 0
อย่างการใช้งานstrcmp char letter1 = ‘c’ char letter2 = ‘k’ int mycmp; mycmp = strcmp(&letter1, &letter) printf(“%d\n”, mycmp); ค่าที่ได้ออกมาจะเป็น ลบ เพราะอักษร c มาก่อน อักษร k * ในการเทียบอักขระ (character) ตัวอักษรเดียว สามารถใช้ ==, >, < ได้ แต่ในแบบฝึกหัดให้ทดลองใช้คำสั่ง strcmp ด้วย
ตัวอย่างโปรแกรมที่ใช้ strcmp ผลการทำงาน