[英]Count the number of inversions in an array that is sorted in increasing order then decreasing order
給定一個按遞增順序然后遞減順序排序的數組,例如:{1, 3, 5, 4, 2},我想找到在 O(n) 中對這個數組進行排序所需的反轉次數。 這是我的代碼,它在 O(n) 中對這樣的 arrays 進行排序:
void sort(long* a, long* result, long n)
{
long* start = &a[0];
long* end = &a[n - 1];
long count = 0;
while (start <= end) {
if (*start < *end) {
result[count] = *start;
start += 1;
}
else {
result[count] = *end;
end -= 1;
}
}
}
在我的代碼中,我從開始和結束使用了 2 個指針,並將排序后的數組存儲到結果數組中。 如何使用類似算法計算反轉次數?
您可以使用“https://www.geeksforgeeks.org/counting-inversions/”中的算法:
算法:
此外,對於您的 function ,您似乎只需要一個新變量來存儲您執行的反轉次數。
希望它有所幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.