天天看點

算法導論習題自做2.2-2

題目:

算法導論習題自做2.2-2

答案:(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>

繼續閱讀