การจัดเรียงข้อมูล Sorting
ความหมาย การจัดเรียงลำดับ (Sorting) หมายถึงการจัดเรียงข้อมูล ให้เรียงลำดับตามเงื่อนไขที่กำหนดไว้ (มากไปน้อย หรือ น้อยไปมาก) ในกรณีที่ข้อมูลในแต่ละ Record มีหลาย Field เราต้องพิจารณาเลือก Field ที่สนใจเพื่อใช้ในการเรียงลำดับ เช่น การจัดเรียงลำดับประวัตินักศึกษา อาจใช้หมายเลขประจำตัวของนักศึกษาเป็น Field โดยเรียงจากน้อยไปมาก เป็นต้น
ประเภทของการเรียงลำดับข้อมูล การจัดเรียงภายใน (Internal Sorting) การจัดเรียงลำดับข้อมูลที่เก็บอยู่ในหน่วยความจำของเครื่องคอมพิวเตอร์ การจัดเรียงแบบนี้จะต้องอาศัยเทคนิคและวิธีการของโครงสร้างข้อมูลมาช่วย เช่น การใช้ Array หรือ Linked-List เข้ามาช่วย การจัดเรียงภายนอก (External Sorting) การจัดเรียงข้อมูลที่เก็บอยู่ในสื่อบันทึกข้อมูล เช่น Disk โดยทั่วไปการเรียงประเภทนี้ มักใช้กับข้อมูลที่มีจำนวนมาก ที่ไม่สามารถเก็บไว้ในหน่วยความจำได้หมด การเรียงในแบบนี้จะต้องแบ่งข้อมูลออกเป็นส่วนย่อย แล้วนำมาเรียงด้วยการจัดเรียงแบบภายในก่อน แล้วจึงนำแต่ละส่วนย่อยมารวมกัน
วิธีการจัดเรียงข้อมูล การจัดเรียงแบบแลกเปลี่ยน (Exchange Sort) การจัดเรียงแบบแทรก (Insertion Sort) การจัดเรียงแบบเลือก (Selection Sort)
การจัดเรียงแบบแลกเปลี่ยน (Bubble Sort) เป็นการจัดเรียงโดยการเปรียบเทียบค่า 2 ค่าที่ติดกัน ทำต่อเนื่องกันไปเรื่อย ๆ และตัดสินใจว่าจะสลับตำแหน่งกันหรือไม่ เช่น ถ้าต้องการเรียงข้อมูลจากน้อยไปมาก ก็คือ ข้อมูลที่มีค่าน้อย ต้องอยู่ในตำแหน่งหน้า ข้อมูลที่มีค่ามาก จะอยู่ตำแหน่งหลัง ข้อมูล 2 ตัวที่อยู่ติดกัน ถ้า ถ้าข้อมูลตัวแรกมากกว่าตัวหลัง ก็จะต้องสลับตำแหน่งกัน แต่ถ้าข้อมูลตัวแรกน้อยกว่าข้อมูลตัวหลัง ก็ไม่ต้องสลับตำแหน่ง ทำเช่นนี้ซ้ำกันไปเรื่อย ๆ จนกว่าการเปรียบเทียบของข้อมูลตลอดทั้งชุดจะไม่ต้องมีการสลับตำแหน่งเลย
ตัวอย่าง Function การจัดเรียงแบบ Bubble
ตัวอย่าง: Bubble Sort 44 55 12 42 94 18 06 67 ข้อมูล 8 ตัวทำ 7 รอบ รอบที่ ข้อมูล 1 06 44 55 12 42 94 18 67 2 06 12 44 55 18 42 94 67 3 06 12 18 44 55 42 67 94 4 06 12 18 42 44 55 67 94 5 06 12 18 42 44 55 67 94 6 06 12 18 42 44 55 67 94 7 06 12 18 42 44 55 67 94
int main() { int A[ELEMENTS]={44,55,12,42,94,6,18,67}; int x; cout<<"NON SORTED LIST:"<<endl; for(x=0;x<ELEMENTS;x++) cout<<A[x]<<endl; } exchange_sort(A,ELEMENTS); cout<<endl<<"SORTED LIST"<<endl; for(x=1;x<=ELEMENTS;x++) return 0; #include <iostream.h> #define ELEMENTS 8 void exchange_sort(int x[],int length) { int temp; for(int i=0;i<length;i++) for (int j=length;j>i;j--) if(x[j-1]>x[j]) temp=x[j-1]; x[j-1]=x[j]; x[j]=temp; }
การจัดเรียงแบบแทรก (Insertion Sort) เป็นการจัดเรียงโดยการนำข้อมูลที่จะทำการเรียงนั้น ๆ ไปจัดเรียงทีละตัว โดยการแทรกตัวที่จะเรียงไว้ในตำแหน่งที่เหมาะสมของข้อมูลที่มีการจัดเรียงเรียบร้อยแล้ว ณ ตำแหน่งที่ถูกต้อง วิธีการลักษณะนี้จะคล้ายกับการหยิบไพ่ขึ้นมาเรียงทีละใบ ซึ่ง ไพ่ใบแรกจะไม่ต้องสนใจอะไร แต่เมื่อหยิบไพ่ใบที่ 2 ก็จะต้องพิจารณาว่าจะไว้ก่อนหรือไว้หลังใบแรก และเช่นเดียวกัน เมื่อหยิบไพ่ใบถัด ๆ มา ก็จะต้องพิจารณาว่าจะวางใบตำแหน่งใดเพื่อให้เกิดการเรียงลำดับ จนกระทั่งหมด
ตัวอย่าง Function การเรียงแบบ Insertion
ตัวอย่าง:Insertion Sort 44 55 12 42 94 18 06 67 ตัวอย่าง:Insertion Sort ข้อมูล 8 ตัวทำ 7 รอบ รอบที่ ข้อมูล 2 44 55 12 42 94 18 06 67 3 12 44 55 42 94 18 06 67 4 12 42 44 55 94 18 06 67 5 12 42 44 55 94 18 06 67 6 12 18 42 44 55 94 06 67 7 06 12 18 42 44 55 94 67 8 06 12 18 42 44 55 67 94
int main() { int A[ELEMENTS]={44,55,12,42,94,06,18,67}; int x; cout<<"NON SORTED LIST:"<<endl; for(x=0;x<ELEMENTS;x++) cout<<A[x]<<endl; } insertion_sort(A,ELEMENTS); cout<<endl<<"SORTED LIST"<<endl; return 0; #include <iostream.h> #define ELEMENTS 8 void insertion_sort(int x[],int length) { int key,i; for(int j=1;j<length;j++) key=x[j]; i=j-1; while(x[i]>key && i>=0) x[i+1]=x[i]; i--; } x[i+1]=key;
การจัดเรียงแบบเลือก (Selection Sort) เป็นการจัดเรียงโดยการเริ่มต้นค้นหาข้อมูลตัวที่น้อยที่สุดจากข้อมูลที่มีอยู่ทั้งหมด แล้วเอามาเก็บไว้ข้างนอก แล้วกลับไปหาข้อมูลตัวที่น้อยที่สุดในกองต่อไปจนกว่าจะหมดกอง
ตัวอย่าง Function การเรียงแบบ Selection
ตัวอย่าง:Selection Sort 44 55 12 42 94 18 06 67 ตัวอย่าง:Selection Sort ข้อมูล 8 ตัวทำ 7 รอบ รอบที่ ข้อมูล 1 06 55 12 42 94 18 44 67 2 06 12 55 42 94 18 44 67 3 06 12 18 42 94 55 44 67 4 06 12 18 42 94 55 44 67 5 06 12 18 42 44 55 94 67 6 06 12 18 42 44 55 94 67 7 06 12 18 42 44 55 67 94
int main() { int A[ELEMENTS]={44,55,12,42,94,6,18,67}; int x; cout<<"NON SORTED LIST:"<<endl; for(x=0;x<ELEMENTS;x++) cout<<A[x]<<endl; } selection_sort(A,ELEMENTS); cout<<endl<<"SORTED LIST"<<endl; for(x=0;x< ELEMENTS;x++) return 0; #include <iostream.h> #define ELEMENTS 8 void selection_sort(int x[],int length) { int k,temp; for(int i=0;i<length;i++) k=i; for (int j=i+1;j< length;j++) if(x[j]< x[k]) k=j; } temp=x[i]; x[i]=x[k]; x[k]=temp;
LAB # 1 ให้นักศึกษาทำความเข้าใจกับรูปแบบ และวิธีการเรียงลำดับข้อมูล (Sorting) ทั้ง 3 แบบ และจงแก้ไขโปรแกรมเพื่อให้ได้ Output ทั้ง 3 ข้อที่กำหนดไว้
Insertion Sort แทรกจากข้างหลัง 44 55 12 42 94 18 06 67 Insertion Sort แทรกจากข้างหลัง ข้อมูล 8 ตัวทำ 7 รอบ Insert2.cpp รอบที่ ข้อมูล 2 44 55 12 42 94 18 06 67 3 44 55 12 42 94 06 18 67 4 44 55 12 42 06 18 67 94 5 44 55 12 06 18 42 67 94 6 44 55 06 12 18 42 67 94 7 44 06 12 18 42 55 67 94 8 06 12 18 42 44 55 67 94
Bubble Sort โดยการไล่จากหน้าไปหลัง 44 55 12 42 94 18 06 67 Bubble Sort โดยการไล่จากหน้าไปหลัง ข้อมูล 8 ตัวทำ 7 รอบ Bubble2.cpp รอบที่ ข้อมูล 1 44 12 42 55 18 06 67 94 2 12 42 44 18 06 55 67 94 3 12 42 18 06 44 55 67 94 4 12 18 06 42 44 55 67 94 5 12 06 18 42 44 55 67 94 6 06 12 18 42 44 55 67 94 7 06 12 18 42 44 55 67 94
Selection Sort เลือกตัวที่มีค่ามากที่สุดมาก่อน 44 55 12 42 94 18 06 67 Selection Sort เลือกตัวที่มีค่ามากที่สุดมาก่อน ข้อมูล 8 ตัวทำ 7 รอบ Select2.cpp รอบที่ ข้อมูล 1 44 55 12 42 67 18 06 94 2 44 55 12 42 06 18 67 94 3 44 18 12 42 06 55 67 94 4 06 18 12 42 44 55 67 94 5 06 18 12 42 44 55 67 94 6 06 12 18 42 44 55 67 94 7 06 12 18 42 44 55 67 94