题目:
答案:(C++代码)
void Selection_Sort(int A[], int count)
{
int min, key, temp;
for (int i = 0; i < count; i++)
{
min = 9999;
for (int j = i; j < count; j++)
{
if (A[j] < min)
{
min = A[j];
}
}
for (int k = 0; 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 = 0; i < count; i++) // 执行count+1次,为了适用普遍情况,后面改用n
{
min = 9999; // 执行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 = 0; 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;
}
}
根据上面的信息,经过计算可以得出,选择排序的最佳和最坏时间复杂度均为
Θ
(