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;
}
}