還在看比較簡單的排序算法,比如這篇提到的簡單選擇排序算法。
基本的思想是,在第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;
}