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