还在看比较简单的排序算法,比如这篇提到的简单选择排序算法。
基本的思想是,在第i次迭代中找到第i个最小的元素,然后把这个元素与原来在第i个乱序的元素交换位置。
形象的说,就是总在观望,很少出手(而冒泡排序是总在出手,从不观望~)
这种算法的比较if()次数是恒定的,但是Swap()的次数只有n-1次。
相比于冒泡排序,规模为10000左右的排序只用200ms左右(冒泡大于700ms),1000规模的排序当然小于1ms。
具体的代码如下:
public static void SimpleSelection(int[] temp)
{
int i, j, min;
for (i = 0; i < temp.Length; i++)
{
min = i;
for (j = i + 1; j < temp.Length; j++)
{
if (temp[min] > temp[j])
min = j;
}
if (i != min)
{
Swap(ref temp[i], ref temp[min]);
}
}
}
private static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}