[英]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.