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