簡體   English   中英

在選擇排序中計算掉期和比較的次數

[英]Counting number of swaps and comparisons in selection sort

我正在嘗試計算選擇排序中的交換次數和比較次數。 數組= [7,-9,-2、17、19、12、8、1,-20、15、3、5]。

void main()
{

    int size = 12, arr[] = { 7, - 9, - 2,   17, 19, 12, 8,  1, - 20,    15, 3,    5 };
    int i, j, temp;
    int comparison = 0;
    int swaps = 0;

    std::cout << "Unsorted: ";
    for (i = 0; i < size; i++)
    {
        std::cout << arr[i] << " ";
    }

    std::cout << "\n";

    for (i = 0; i < size; i++)
    {
        for (j = i + 1; j < size; j++)
        {
            comparison = comparison + 1;
            if (arr[i] > arr[j])
            {
                swaps = swaps + 1;
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }

    std::cout << "\nComparisons: " << comparison;
    std::cout << "\nSwap: " << swaps;

    std::cout << "\n\nSorted: ";
    for (i = 0; i < size; i++)
    {
        std::cout << arr[i] << " ";
    }

這將返回66個比較和34個交換。 如何正確計算和輸出比較和交換的數量?

在這個很棒的網站http://bigocheatsheet.com/上,您可以找到所有不同排序算法的訂單。 它說選擇排序應具有O(n ^ 2)的最壞情況。 您有12個變量; 12 ^ 2 = 144,遠大於交換和比較的數量-因此,您處於最壞情況的范圍內。

但是,如果要說的是要輸出已進行的交換,而不是交換的實際數量,則可以編寫如下內容:

if (arr[i] > arr[j])
{
    std::cout << "Swapping " << arr[i] << " with " << arr[j] << ".\n";
    swaps = swaps + 1;
    temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM