1,冒泡排序

  最慢的排序算法,基本上只是作为教科书的教学素材,没多少实用价值。还有就是好多公司用作面试题。其思想是比较相邻的两个值,大的值往右(或左)移动。

public void BubbleSort()
{
int temp = 0;
for (int outer = 0; outer < upper; outer++)
{
for (int inner = 0; inner < upper - 1; inner++)
{
if (arr[inner] > arr[inner + 1])
{
temp
= arr[inner];
arr[inner]
= arr[inner + 1];
arr[inner
+ 1] = temp;
}
}
  }
}

  2,选择排序

  有些书上说选择排序在小数量的情况小会快于插入排序,但是我从来没测到过这种情况。选择排序的思想是遍历元素,从第一个元素开始与后面元素比较,找到比其小的(或大的)数并与其交换,直到最后的一个元素。

public void SelectionSort()
{
int temp, min;
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;
}
}

  3,插入排序

  比前两种快,稳定排序算法。排序的方法是从第一个元素开始与后面的元素比较,把比其小的数拿出来,然后把前面的元素都往右移动,把小的数放到最左,直到最后一个元素。与选择排序不同的是,这里是移动,不是交换。

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
--;
}
arr[inner]
= temp;
}
}
  虽然有很多高级的排序算法(其实不过是些“递归”),但是在小数量的情况下简单的排序算法还是最合适的选择。这里插入排序算法最快,另外的两个可以用做面试题,呵呵。