数据结构3排序算法

冒泡排序

  算法描述:排序问题是基本算法,主要有冒泡算法、插入排序以及选择排序算法。冒泡算法是对整个列进行多次遍历循环,直至将所有的数都比较一遍,每次循环都能产生一个最大数放置于后面,这样需要两层循环:外层控制次数,内层控制单次冒泡,内层针对的是相邻里两个进行比较的循环。

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(10);
        Random rnd = new Random();
        for (int i = 0; i <=nums.upper; i++)
        {
            nums.Insert(rnd.Next(0,100));
        }
        nums.DisplayElements();
        Console.ReadLine();
        nums.InsertionSort();
        Console.ReadKey();
    }

    //冒泡法排序
    public void BubbleSort()
    {
        int temp;
        for (int outer = upper; outer >0; outer--)
        {
            for (int inner = 0; inner < outer; inner++)
            {
                if (arr[inner]>arr[inner+1])
                {
                    temp = arr[inner];
                    arr[inner] = arr[inner + 1];
                    arr[inner+1] = temp;
                }
            }
            this.DisplayElements();
            Console.Write("\n");
        }


    }

    //选择排序 每次从外层循环选择一个数,作为内层循环的初始化数,内层是将这个数从outer
  //的地方开始循环比较出现在的最小的,然后把这个索引值存放起来,内层循环一次就交换
  //至outer所在的数字.
    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();
            Console.Write("\n");
        }
    }

    //插入排序
  //插入排序是用的最小的循环,在内层循环用while每次取外面一个数进行比较,从outer位置开始交换位置,直至
  //找到自己合适的位置
    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();
            Console.Write("\n");
        }
    }
}

纸上得来终觉浅,绝知此事要躬行
原文地址:https://www.cnblogs.com/d2ee/p/1857796.html