假设我有一个N编号的数组未分类。要对数组进行排序,请使用以下代码:
for (int i = 1; i < n; i = i + 1)
{
int j = i;
while (j > 0 && a[j] < a[j - 1])
{
swap(a[j], a[j - 1]);
j = j - 1;
}
}
据我所知,被称为冒泡排序。为了减少交换函数的反转/调用次数,我可以预交换任何两个元素,比如它们有索引i和j,然后我执行实际的排序函数。 查找此类数量的对(i,j)以使反转次数变得最小的最有效算法是什么? 实际上这是一个Codeforces问题,我也经历了教程和许多公认的代码。但是我仍然难以理解它们背后的逻辑。既然我是一个新手程序员,那么有人可以从头开始向我解释这个过程吗?在此先感谢:)