C++11 什么是最有效的算法来找到这样的对数(i,j),从而使反演的数量变得最小

C++11 什么是最有效的算法来找到这样的对数(i,j),从而使反演的数量变得最小,c++11,bubble-sort,C++11,Bubble Sort,假设我有一个未排序的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; } } for(int i=1;i0&&a[j]

假设我有一个未排序的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;
   }
}
for(int i=1;i0&&a[j]
据我所知,这就是所谓的气泡排序。为了减少交换函数的反转/调用次数,我可以预先交换任意两个元素,假设它们有索引i和j,然后执行实际的排序函数找到这样数量的对(i,j)的最有效算法是什么,从而使反演的数量变得最小?
实际上,这是一个代码力问题,我也阅读了教程和许多公认的代码。但我仍然很难理解它们背后的逻辑。既然我是一个新手程序员,谁能给我解释一下从头开始的过程?提前感谢:)

我记得冒泡排序不是一种非常有效的方法,那么为什么要尝试改进这段代码呢?既然你说你是一个新手程序员,我建议你使用
线性搜索
进行排序,这通常也不是很有效,但实现起来很简单,而且正如Knuth所写的,如果数字列表不太大,它仍然比其他方法更有效,最多说几百个项目。感谢您尝试帮助我:)但我知道冒泡排序的工作原理以及一些排序算法,如插入排序、合并排序等。但是我从教程中得到的,我试图找到的解决方案可能涉及某种分而治之的技术,我在解读逻辑方面遇到了实际困难:(如果有帮助,我可以提供问题链接[