检测算法的类
using System;
class CArray
{
private int[] arr;
private int upper;
private int numElements;
public CArray(int size)
{
arr = new int[size];
upper = size - 1;
numElements = 0;
}
public void Insert(int item)
{
arr[numElements] = item;
numElements++;
}
public void DisplayElements()
{
for (int i = 0; i <= upper; i++)
Console.Write(arr[i] + " ");
}
public void Clear()
{
for (int i = 0; i <= upper; i++)
arr[i] = 0;
numElements = 0;
}
static void Main()
{
CArray nums = new CArray(50);
for (int i = 0; i <= 49; i++)
nums.Insert(i);
nums.DisplayElements();
Console.ReadKey();
}
}
public void BubbleSort() //冒泡算法
{
int temp;
for (int outer = upper; outer >= 1; outer--)
{
for (int inner = 0; inner <= outer - 1; inner++)
{
if ((int)arr[inner] > arr[inner + 1])
{
temp = arr[inner];
arr[inner] = arr[inner + 1];
arr[inner + 1] = temp;
}
}
this.DisplayElements();
}
}
public void SelectionSort() // 选择排序
{
int min, temp;
for (int outer = 0; outer <= upper; outer++)
{
min = outer;
for (int inner = outer + 1; inner <= upper; inner++)
{
if (arr[inner] < arr[min]) min = inner;
}
temp = arr[outer];
arr[outer] = arr[min];
arr[min] = temp;
this.DisplayElements();
}
}
public void InsertionSort() // 插入排序
{
int inner, temp;
for (int outer = 1; outer <= upper; outer++)
{
temp = arr[outer];
inner = outer;
while (inner > 0 && arr[inner - 1] >= temp)
{
arr[inner] = arr[inner - 1];
inner -= 1;
}
arr[inner] = temp;
this.DisplayElements();
}
}
static void Main() // 三种排序
{
Timing sortTime = new Timing();
Random rnd = new Random(100);
int numItems = 1000;
CArray theArray = new CArray(numItems);
for (int i = 0; i < numItems; i++)
theArray.Insert(rnd.NextDouble() * 100);
sortTime.startTime();
theArray.SelectionSort();
sortTime.stopTime();
Console.WriteLine("Time for Selection sort: " + sortTime.Result().TotalMilliseconds);
theArray.Clear();
for (int i = 0; i < numItems; i++)
theArray.Insert(rnd.NextDouble() * 100);
sortTime.startTime();
theArray.BubbleSort();
sortTime.stopTime();
Console.WriteLine("Time for Bubble sort: " + sortTime.Result().TotalMilliseconds);
theArray.Clear();
for (int i = 0; i < numItems; i++)
theArray.Insert(rnd.NextDouble() * 100);
sortTime.startTime();
theArray.InsertionSort();
sortTime.stopTime();
Console.WriteLine("Time for Insertion sort: " + sortTime.Result().TotalMilliseconds);
}
数组的大小会使算法的性能产生差异,当数量增加到100000个的时候,选择排序比冒泡快100倍数,比插入排序快了200多倍。