題目:

答案:(C++代碼)
void Selection_Sort(int A[], int count)
{
int min, key, temp;
for (int i = ; i < count; i++)
{
min = ;
for (int j = i; j < count; j++)
{
if (A[j] < min)
{
min = A[j];
}
}
for (int k = ; k < count; k++)
{
if (A[k] == min)
{
key = k;
break;
}
}
temp = A[i];
A[i] = A[key];
A[key] = temp;
}
}
為了友善計算時間複雜度,再次貼出代碼:
void Selection_Sort(int A[], int count)
{
int min, key, temp;
for (int i = ; i < count; i++) // 執行count+1次,為了适用普遍情況,後面改用n
{
min = ; // 執行n次
for (int j = i; j < count; j++) // 執行(n+1)+n+...+0次
{
if (A[j] < min) // 執行n+(n-1)+...+0次
{
min = A[j]; // 最佳情況執行n次,最壞情況執行n+(n-1)+...+0次
}
}
for (int k = ; k < count; k++) // 執行n(n+1)次
{
if (A[k] == min) // 執行n^2次
{
key = k; // 最佳情況執行n次,最壞情況執行n^2次
break; // 同上
}
}
temp = A[i]; // 以下三句均執行n次
A[i] = A[key];
A[key] = temp;
}
}
根據上面的資訊,經過計算可以得出,選擇排序的最佳和最壞時間複雜度均為 Θ ( n2 ) <script type="math/tex" id="MathJax-Element-26">)</script>