检测算法的类

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多倍。