"เวลา" สิ่งเล็กๆที่บางครั้งเราอาจจะมองข้ามไป เวลาเขียนโปรแกรมแอดมินเองก็ไม่ค่อยจะสนใจหรอกครับว่าโปรแกรมมันจะใช้เวลาทำงานเท่าไหร่ จนเมื่อมาทำงานเนี่ยแหละครับ Requirement ต้องการให้โปรแกรมต้องทำงานเสร็จภายใน 2 นาที *o* ว๊ากกกก จะทำไงเนี่ย! ไอ้โปรแกรมเราก็คำนวณเยอะซะเหลือเกิน สุดท้ายแล้วแอดมินก็ต้องทำจับเวลาดูทีละส่วน ว่าส่วนไหนมันใช้เวลาเยอะเป็นพิเศษ แล้วค่อยปรับอัลกอริทึมใหม่ แต่ประเด็นคือ เราจะจับเวลาเป็นส่วนๆ ยังไงหล่ะ ? เนี่ยแหละครับที่แอดมินอยากบอก
Stopwatch หลายคนอาจจะรู้จักแล้ว หลายคนไม่เคยคิดจะใช้มัน Stopwatch เป็นคลาสที่ติดมากับ .NET Framework อยู่แล้วเหลือแค่รอให้เราเรียกใช้มัน โดยหลักๆแล้ว เราจะใช้แค่เริ่มนับเวลา หยุด แล้วก็ดูเวลาที่นับได้ แอดมินก็จะแสดงตัวอย่างแค่นี้แหละ หึหึ
using System.Diagnostics; // อย่าลืม ! Stopwatch sw = new Stopwatch(); //ทำการเรียกใช้คลาส Stopwatch sw.Start(); //เริ่มนับเวลา sw.Stop(); //หยุดนับเวลา sw.Elapsed; //เรียกดูค่าเวลาที่นับ รูปแบบ TimeSpan(Hours:Minutes:Seconds.Milliseconds)
ตัวอย่างโปรแกรม เปรียบเทียบประสิทธิภาพของ Insertion Sort กับ Selection Sort ปล.Console Application นะจ๊ะ
โปรแกรมจะประกอบด้วย 4 เมธอด คือ
//1.Main
//เมธอดทำงานหลัก สำหรับเรียกใช้เมธอดอื่น
static void Main(string[] args)
{
for (int i = 0; i < 20; i++)
{
int[] arr = RandomArray();
Console.Write("Insertion Sort : " + InsertionSort(arr));
Console.Write(" Selection Sort : " + SelectionSort(arr));
Console.WriteLine();
}
Console.Read();
}
//2.RandomArray
//เมธอดสำหรับสุ่มค่าตั้งแต่ 0 ถึง 100 ใส่ในอาเรย์ขนาด 100
//เพื่อใช้สำหรับทดสอบการเรียงค่าในอาเรย์ทั้ง 2 แบบ
static int[] RandomArray()
{
int[] arr = new int[100];
for (int i = 0; i < arr.Length; i++)
{
Random ran = new Random();
arr[i] = ran.Next(0, 100);
Thread.Sleep(10);
}
return arr;
}
//3.InsertionSort
// เมธอดการเรียงข้อมูลแบบ Insertion Sort
static TimeSpan InsertionSort(int[] arr)
{
int j;
int index;
Stopwatch SW = new Stopwatch();
SW.Start();
for (int i = 1; i < arr.Length; i++)
{
index = arr[i];
j = i;
while ((j > 0) && (arr[j - 1] > index))
{
arr[j] = arr[j - 1];
j = j - 1;
}
arr[j] = index;
}
SW.Stop();
return SW.Elapsed;
}
//4.SelectionSort
// เมธอดการเรียงข้อมูลแบบ Selection Sort
static TimeSpan SelectionSort(int[] arr)
{
int min, temp;
Stopwatch SW = new Stopwatch();
SW.Start();
for (int i = 0; i < arr.Length - 1; i++)
{
min = i;
for (int j = i + 1; j < arr.Length; j++)
{
if (arr[j] < arr[min])
{
min = j;
}
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
SW.Stop();
return SW.Elapsed;
}
ผลลัพธ์ของโปรแกรม
จากผลที่ได้จะเห็นว่า Insertion sort ทำเวลาได้ดีกว่า Selection sort จากการจับเวลาด้วย Stopwatchศึกษาตัวอย่างเพิ่มเติมได้ที่ dotnetperls.com

